【问题标题】:Convert date from excel file to pandas将日期从excel文件转换为熊猫
【发布时间】: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?

【问题讨论】:

    标签: excel pandas datetime


    【解决方案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 文件,稍作调整就解决了这个问题,但这个解决方案非常强大。
    猜你喜欢
    • 2021-09-16
    • 2015-09-19
    • 2017-03-05
    • 2018-08-09
    • 2018-12-08
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多