如何在 Pandas 中将 DataFrame 列转换为日期时间
Jinku Hu
2023年1月30日
-
Pandas
to_datetime
函数将 DataFrame 列转换为日期时间 -
DataFrame
apply
方法将 DataFrame 列转换为 Datetime - 将 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
模块中的 stftime
或 strptime
函数中的格式相同。
>>> 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_format
的 to_datetime
是 true
来转换切换到更快的模式。
解析速度将会提高 5〜6 倍。
DataFrame apply
方法将 DataFrame 列转换为 Datetime
apply(func, *args, **kwds)
DataFrame
的 apply
方法对每个列或行应用 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%。
作者: Jinku Hu
相关文章 - Pandas DataFrame
- 如何将 Pandas DataFrame 列标题获取为列表
- 如何删除 Pandas DataFrame 列
- 如何在 Pandas DataFrame 中将浮点数转换为整数
- 如何按一列的值对 Pandas DataFrame 进行排序
- 如何用 group-by 和 sum 获得 Pandas 总和
相关文章 - Pandas DataFrame Column
- 如何将 Pandas DataFrame 列标题获取为列表
- 如何删除 Pandas DataFrame 列
- 如何获得 Pandas 列中元素总和
- 如何更改 Panas DataFrame 列的顺序
- 如何在 Pandas 中将 DataFrame 列转换为字符串