Pandas read_csv无法将ISO8601识别为datetime dtype

时间:2014-12-03 16:30:37

标签: python datetime pandas

目前我使用pandas将csv文件读入DataFrame,使用第一列作为索引。第一列是ISO 8601格式,因此根据read_csv的文档,它应该被识别为日期时间:

In [1]: import pandas as pd

In [2]: df = pd.read_csv('data.csv', index_col=0)

In [3]: print df.head()
                        U     V     Z    Ubar    Udir
2014-11-01 00:00:00  0.73 -0.81  0.46  1.0904  317.97
2014-11-01 01:00:00  1.26 -1.50  0.32  1.9590  319.97
2014-11-01 02:00:00  1.50 -1.80  0.13  2.3431  320.19
2014-11-01 03:00:00  1.39 -1.65  0.03  2.1575  319.89
2014-11-01 04:00:00  0.94 -1.08 -0.03  1.4318  318.96

但是,在查询索引dtype时,它会返回' object':

In [4]: print df.index.dtype
object

然后我必须手动将其转换为datetime dtype:

In [5]: df.index = pd.to_datetime(df.index)

In [6]: print df.index.dtype
datetime64[ns]

调用read_csv()时,有没有办法自动将索引设置为datetime dtype?

2 个答案:

答案 0 :(得分:1)

我刚刚为csv文件中的第一列添加了列名。

                 Date     U     V     Z    Ubar    Udir
0  2014-11-01 00:00:00  0.73 -0.81  0.46  1.0904  317.97
1  2014-11-01 01:00:00  1.26 -1.50  0.32  1.9590  319.97
2  2014-11-01 02:00:00  1.50 -1.80  0.13  2.3431  320.19
3  2014-11-01 03:00:00  1.39 -1.65  0.03  2.1575  319.89
4  2014-11-01 04:00:00  0.94 -1.08 -0.03  1.4318  318.96

df = pd.read_csv(input_file)
df.index = pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S')

如果要删除日期列,可以使用

df = df.drop('Date', 1)

答案 1 :(得分:1)

read_csv文档描述了parse_dates参数:

  

parse_dates:boolean或整数或名称列表或列表或dict列表,默认为False
   - 布尔值。如果为True - >尝试解析索引。
   - 整数或名称列表。例如如果[1,2,3] - >尝试将第1,2,3列分别解析为单独的日期列。
   - 列表清单。例如如果[[1,3]] - >将第1列和第3列组合在一起并解析为   单个日期列。
   - dict,例如{'foo':[1,3]} - >将列1,3解析为日期并调用结果'foo'
  注意:iso8601格式的日期存在快速路径。

由于您要解析索引,可以使用:

#sidebar