将Excel文件中的日期转换为Pandas格式

3
我正在导入Excel文件,其中“日期”列的写法不同:
      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没有正确解析日期和时间:
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中?

1个回答

7

新回答:

实际上,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]

太棒了!感谢指出“dayfirst=True”选项。我将其转换为CSV文件,并进行了一些小调整,解决了问题,但这种解决方案还不够健壮。 - Arnold Klein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接