Python Pandas read_csv未将ISO8601识别为日期时间数据类型
目前,我正在使用pandas将csv文件读入Python Pandas read_csv未将ISO8601识别为日期时间数据类型,python,datetime,pandas,Python,Datetime,Pandas,目前,我正在使用pandas将csv文件读入数据帧,使用第一列作为索引。第一列为ISO 8601格式,因此根据的文档,应将其识别为日期时间: 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
数据帧
,使用第一列作为索引。第一列为ISO 8601格式,因此根据的文档,应将其识别为日期时间:
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
但是,当查询索引数据类型时,它返回“object”:
In [4]: print df.index.dtype
object
然后,我必须手动将其转换为datetime数据类型:
In [5]: df.index = pd.to_datetime(df.index)
In [6]: print df.index.dtype
datetime64[ns]
调用
read\u csv()
时,有没有办法自动将索引设置为datetime dtype?我刚刚为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)
文档描述了parse_dates参数:
解析日期:布尔值或整数或名称列表或列表或dict列表,默认为False-布尔型。如果为True->尝试解析索引
-整数或名称的列表。e、 g.如果[1,2,3]->尝试将列1,2,3解析为单独的日期列
-清单清单。e、 g.如果[[1,3]]->组合第1列和第3列并按如下方式进行分析 一个日期列
-dict,例如,{'foo':[1,3]}->将第1,3列解析为日期并调用结果'foo'
注意:iso8601格式的日期存在快速路径 由于要分析索引,可以使用:
import pandas as pd
df = pd.read_csv('data.csv', index_col=0, parse_dates=True)
您没有告诉它将列解析为datetime
df=pd.read\u csv('data.csv',parse\u dates=0,index\u col=0)
是的,这就成功了!由于某种原因,当我阅读read_csv
文档时,我认为parse_dates
默认为True
,可能是因为阅读:“If True->try parse the index”我总是发现read_csv
文档的这一方面模棱两可,可能不正确,我总是必须传递整数索引,注意:如果要分析多个列,如:parse_dates=[0,3,4]
和嵌套列表,如果要将多个列作为单个datetime列进行分析:parse_dates=[[0,1]]
。所以我注意到设置parse_dates=True
不起作用,所以我总是为列indexYeah传递一个列表或单个int,我以前在组合多个列时使用过parse_dates
和date_parser
。嗯,这很奇怪,parse_dates=True
在我当前的设置(Python2.7.8 x64,pandas 0.15.1)下似乎工作得很好奇怪,但在Python3.3.5 64位,pandas 0.15.1上使用您的数据仍然失败