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

时间:2016-04-25 18:37:42

标签: python pandas

我想根据具有以下格式的testresult.csv文件绘制RESULT与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  
...

要阅读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'的错误指令”

请提出任何建议或提示。

由于

2 个答案:

答案 0 :(得分:7)

您传递的格式无效。 %I之间的短划线不应该在那里。

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

这会将您的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'))

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

答案 1 :(得分:1)

你可以试试这个:

In [69]: df = pd.read_csv(fn, parse_dates=[0],
                          date_parser=lambda x: pd.to_datetime(x, format='%m/%d/%Y %I:%M:%S %p'))

In [70]: df
Out[70]:
                 TIME  RESULT
0 2016-03-24 00:27:11       2
1 2016-03-24 00:28:41      76
2 2016-03-24 00:37:23      19
3 2016-03-24 00:38:44      68
4 2016-03-24 00:42:02      44