请考虑以下代码:
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'
转换为datetime?
答案 0 :(得分:3)
我认为您只需要%p
而不是%r
。差异是%r
期望标点符号(A.M.或P.M.),而%p
则不是(AM或PM)。
进行更改时,您的代码不会产生任何错误:
pd.to_datetime(some_time, format='%m/%d/%Y %I:%M:%S %p')
答案 1 :(得分:0)
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
关键字参数的相同输出。