如何在 Pandas 中将 DataFrame 列转换为日期时间

  1. Pandas to_datetime 函数将 DataFrame 列转换为日期时间
  2. DataFrame apply 方法将 DataFrame 列转换为 Datetime
  3. 将 DataFrame 列转换为日期时间方法的性能比较

我们将介绍将将 Pandas DataFrame 列转换为 Python 日期时间的方法。

  • Pandas to_datetime() 函数
  • 用 DataFrame 的 apply 方法对列中的元素进行操作

我们将在后续介绍中使用相同的 DataFrame,如下,

>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
    [('Alfa', [1, 2, 3]), 
     ('Bravo', [4, 5, 6]), 
     ('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])], 
    orient='index', 
    columns=['A', 'B', 'C']).T
>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55

Pandas to_datetime 函数将 DataFrame 列转换为日期时间

Pandas to_datetime 函数 将给定参数转换为 datetime

pandas.to_datetime(param, format="")

该格式指定日期时间字符串的格式。它与 Python datetime 模块中的 stftimestrptime 函数中的格式相同。

>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55

to_datetime() 函数不会就地修改 DataFrame 数据,因此我们需要将返回的 Series 分配给特定的 Pandas DataFrame 列。

to_datetime() 函数可以智能地转换日期时间

to_datetime() 函数无需指定 datetime 格式字符串即可以一种智能的方式转换为 datetime。它将自动、智能地找到字符串模式。

>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55
注意

尽管 to_datetime 可以在不提供 format 的情况下智能的完成转换,但是转换速度远低于给出 format 时的速度。

我们可以设置选项 infer_datetime_formatto_datetimetrue 来转换切换到更快的模式。

解析速度将会提高 5〜6 倍。

DataFrame apply 方法将 DataFrame 列转换为 Datetime

apply(func, *args, **kwds)

DataFrameapply 方法对每个列或行应用 func 函数。

为了简单起见,我们可以使用 lambda 函数来代替 func

>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
           
>>> df
           
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:44:35
B    2     5 2019-12-06 14:44:35
C    3     6 2019-12-05 14:44:35

将 DataFrame 列转换为日期时间方法的性能比较

让我们用 timeit 来比较本文介绍的两种方法的时间性能。

In [1]: %timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [2]: %timeit df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

apply 方法甚至比 Pandas 原生的 to_datetime 方法稍好一点,其执行时间约为 to_datetime 函数的 80%。

相关文章 - Pandas DataFrame

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在Pandas DataFrame中将浮点数转换为整数
  • 如何按一列的值对Pandas DataFrame进行排序
  • 如何用group-by 和sum 获得 Pandas 总和
  • 如何将Python词典转换为Pandas DataFrame
  • 如何将标题行添加到Pandas DataFrame
  • 如何将Pandas Dataframe转换为Numpy数组
  • 如何将Pandas DataFrame的索引转换为列
  • 如何计算Pandas Dataframe列中的NaN出现的次数
  • 如何更改Panas DataFrame列的顺序
  • 如何在Pandas DataFrame中添加一行
  • 如何基于Pandas DataFrame中的列值删除行
  • 如何从Pandas DataFrame 单元格获取值
  • 相关文章 - Pandas DataFrame Column

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在Pandas DataFrame中将浮点数转换为整数
  • 如何按一列的值对Pandas DataFrame进行排序
  • 如何用group-by 和sum 获得 Pandas 总和
  • 如何将Python词典转换为Pandas DataFrame
  • 如何将标题行添加到Pandas DataFrame
  • 如何将Pandas Dataframe转换为Numpy数组
  • 如何将Pandas DataFrame的索引转换为列
  • 如何计算Pandas Dataframe列中的NaN出现的次数
  • 如何更改Panas DataFrame列的顺序
  • 如何在Pandas DataFrame中添加一行
  • 如何基于Pandas DataFrame中的列值删除行
  • 如何从Pandas DataFrame 单元格获取值
  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何更改Panas DataFrame列的顺序
  • 相关文章 - Python datetime

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在Pandas DataFrame中将浮点数转换为整数
  • 如何按一列的值对Pandas DataFrame进行排序
  • 如何用group-by 和sum 获得 Pandas 总和
  • 如何将Python词典转换为Pandas DataFrame
  • 如何将标题行添加到Pandas DataFrame
  • 如何将Pandas Dataframe转换为Numpy数组
  • 如何将Pandas DataFrame的索引转换为列
  • 如何计算Pandas Dataframe列中的NaN出现的次数
  • 如何更改Panas DataFrame列的顺序
  • 如何在Pandas DataFrame中添加一行
  • 如何基于Pandas DataFrame中的列值删除行
  • 如何从Pandas DataFrame 单元格获取值
  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何更改Panas DataFrame列的顺序
  • Python 中如何得到当前时间
  • Python 如何将字符串转换为时间日期 datetime 格式
  • comments powered by Disqus