将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]