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

时间:2016-07-14 20:25:42

标签: python pandas strftime

请考虑以下代码:

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?

2 个答案:

答案 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关键字参数的相同输出。