将日期从excel文件转换为熊猫
Posted
技术标签:
【中文标题】将日期从excel文件转换为熊猫【英文标题】:Convert date from excel file to pandas 【发布时间】:2017-08-18 19:01:00 【问题描述】:我正在导入 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
导入熊猫:
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】:新答案:
实际上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 文件,稍作调整就解决了这个问题,但这个解决方案非常强大。以上是关于将日期从excel文件转换为熊猫的主要内容,如果未能解决你的问题,请参考以下文章