指定 strftime 格式以加速 pandas' to_datetime() 方法

Specifying a strftime format to speed up pandas' to_datetime() method

考虑以下代码:

import pandas as pd
some_time='01/01/2011 12:02:41 AM'
print(pd.to_datetime(some_time))
print(pd.to_datetime(some_time, format='%m/%d/%Y %I:%M:%S %r'))

第一个 to_datetime() 转换有效并打印输出

2011-01-01 00:02:41

不幸的是,在我的实际应用程序中,我正在处理一个超过 200 万行的 DataFrame,默认的 to_datetime() 非常慢,即使我在关键字参数中设置了 infer_datetime_format=True

我读到 to_datetime() 可以通过明确指定字符串格式来加快速度。我在 http://www.tutorialspoint.com/python/time_strftime.htm 之后尝试过此操作,但我上面的尝试失败并出现错误 ValueError: 'r' is a bad directive in format '%m/%d/%Y %I:%M:%S %r'

如何指定正确的 strftime 格式以将 '01/01/2011 12:02:41 AM' 转换为日期时间?

我认为您只需要 %p 而不是 %r。区别在于 %r 需要标点符号(A.M。或 P.M),而 %p 不需要(AM 或 PM)。

当我进行更改时,您的代码没有产生任何错误:

pd.to_datetime(some_time, format='%m/%d/%Y %I:%M:%S %p')

评论中root给出了正确答案。为了完整起见,需要将 %r 替换为 %p:

some_time='01/01/2011 12:02:41 AM'
print(pd.to_datetime(some_time))
print(pd.to_datetime(some_time, format='%m/%d/%Y %I:%M:%S %p'))

这会产生输出

2011-01-01 00:02:41
2011-01-01 00:02:41

也就是说,带有和不带有 format 关键字参数的输出相同。