使用pandas to_datetime时如何定义格式?

ju.*_*ju. 9 python pandas

我想根据testresult.csv具有以下格式的文件绘制RESULT vs TIME ,我无法正确定义TIME列的数据类型.

TIME,RESULT  
03/24/2016 12:27:11 AM,2  
03/24/2016 12:28:41 AM,76  
03/24/2016 12:37:23 AM,19  
03/24/2016 12:38:44 AM,68  
03/24/2016 12:42:02 AM,44  
...
Run Code Online (Sandbox Code Playgroud)

要读取csv文件,这是我写的代码: raw_df = pd.read_csv('testresult.csv', index_col=None, parse_dates=['TIME'], infer_datetime_format=True)
这段代码有效,但速度非常慢,我认为infer_datetime_format需要时间.所以我首先尝试在csv中读取,然后使用to_datetime()将对象dtype'TIME'转换为datetime dtype,我希望通过定义格式,它可以加快速度. raw_df = pd.read_csv('testresult.csv') raw_df.loc['NEWTIME'] = pd.to_datetiem(raw_df['TIME'], format='%m/%d%Y %-I%M%S %p') 此代码抱怨错误"ValueError:' - '格式为'%m /%d%Y%-I%M%S%p'的错误指令"

请任何建议或提示都会有所帮助.

谢谢

And*_*ndy 11

您传递的格式无效.%和之间的冲刺I不应该在那里.

df['TIME'] = pd.to_datetime(df['TIME'], format="%m/%d/%Y %I:%M:%S %p")
Run Code Online (Sandbox Code Playgroud)

这会将您的TIME列转换为日期时间.


或者,您可以调整read_csv呼叫以执行此操作:

pd.read_csv('testresult.csv', parse_dates=['TIME'], 
    date_parser=lambda x: pd.to_datetime(x, format='%m/%d/%Y %I:%M:%S %p'))
Run Code Online (Sandbox Code Playgroud)

同样,这使用了适当的格式而没有额外的-,但它也将格式传递给date_parser参数,而不是让pandas尝试用infer_datetime_format参数猜测它.

  • 谢谢你,安迪。我想我也粗心地错过了小时、分钟和秒之间的“:”,这就是为什么即使我尝试了 %I,它仍然失败。我表中的时间确实有一些情况下没有零填充小时格式“03/24/2016 1:08:19 AM”,并且基于 Python 的 strftime 格式(请参阅此 http://strftime.org/ 列表),它应该使用'%-I'。你知道为什么pandas与此不一致吗? (2认同)