指定 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
关键字参数的输出相同。
考虑以下代码:
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
关键字参数的输出相同。