将excel文件的date转换成pandas
我正在导入excel文件,“date”列有不同的写法:
Date 13/03/2017 13/03/2017 13/03/2017 13/03/2017 10/3/17 10/3/17 9/3/17 9/3/17 9/3/17 9/3/17
导入pandas:
df = pd.read_excel('data_excel.xls') df.Date = pd.to_datetime(df.Date)
结果是:
Date 13/03/2017 64 13/03/2017 65 13/03/2017 66 13/03/2017 67 2017-10-03 00:00:00 68 2017-10-03 00:00:00 69 2017-09-03 00:00:00 70 2017-09-03 00:00:00 71 2017-09-03 00:00:00 72 2017-09-03 00:00:00
这意味着,大pandas没有正确地parsingdate和时间:
10/3/17 -> 2017-10-03
当我试图指定的格式:
df.Date = pd.to_datetime(df.Date, format='%d%m%Y')
得到了错误:
ValueError: time data u'13/03/2017' does not match format '%d%m%Y' (match)
题:
如何正确导入Excel文件到pandas的date和时间?
新答案:
其实pd.to_datetime
有一个dayfirst
关键字参数在这里很有用:
df.Date = pd.to_datetime(df.Date,dayfirst=True)
结果:
>>> df.Date 0 2017-03-13 1 2017-03-13 2 2017-03-13 3 2017-03-13 4 2017-03-10 5 2017-03-10 6 2017-03-09 7 2017-03-09 8 2017-03-09 9 2017-03-09 Name: Date, dtype: datetime64[ns]
老答案:
使用可以处理这种变化的第三方模块dateutil
。 它有一个dayfirst
关键字参数在这里很有用:
import dateutil df = pd.read_excel('data_excel.xls') df.Date = df.Date.apply(lambda x: dateutil.parser.parse(x,dayfirst=True))
结果:
>>> df.Date 0 2017-03-13 1 2017-03-13 2 2017-03-13 3 2017-03-13 4 2017-03-10 5 2017-03-10 6 2017-03-09 7 2017-03-09 8 2017-03-09 9 2017-03-09 Name: Date, dtype: datetime64[ns]