【发布时间】:2015-02-01 07:36:09
【问题描述】:
目前我正在使用 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?
【问题讨论】:
-
你没有告诉它把列解析为日期时间
df = pd.read_csv('data.csv', parse_dates = 0, index_col=0) -
是的,成功了!出于某种原因,当我阅读
read_csv的文档时,我认为parse_dates默认为True,可能来自阅读:“如果为真-> 尝试解析索引” -
我一直发现
read_csv文档的这一方面是模棱两可的,可能不正确,我总是不得不传递整数索引,请注意,如果你愿意,你必须作为列表传递解析多个列,如下所示:parse_dates=[0,3,4]和嵌套列表,如果您希望它将多个列解析为单个日期时间列:parse_dates=[[0,1]]。所以我注意到设置parse_dates=True不起作用所以我总是为列索引传递一个列表或单个 int -
是的,当我不得不合并多个列时,我曾经使用过
parse_dates和date_parser。嗯,这很奇怪,parse_dates=True似乎在我当前的设置下工作正常(python 2.7.8 x64,pandas 0.15.1) -
在 python 3.3.5 64 位、pandas 0.15.1 上使用你的数据对我来说仍然很奇怪