【问题标题】:Convert Excel style date with pandas用 pandas 转换 Excel 样式的日期
【发布时间】:2016-11-22 02:31:03
【问题描述】:

我必须解析一个 xml 文件,该文件为我提供 Excel 样式的日期时间;例如:42580.3333333333

Pandas 是否提供将该数字转换为常规 datetime 对象的方法?

【问题讨论】:

标签: python excel pandas date datetime


【解决方案1】:

你可以直接用pd.to_datetime解析,用关键字unit='D'origin='1899-12-30'

import pandas as pd

df = pd.DataFrame({'xldate': [42580.3333333333]})

df['date'] = pd.to_datetime(df['xldate'], unit='D', origin='1899-12-30')

df['date']
Out[2]: 
0   2016-07-29 07:59:59.999971200
Name: date, dtype: datetime64[ns]

进一步阅读:

【讨论】:

    【解决方案2】:

    好的,我认为最简单的方法是从浮点数构造 TimedeltaIndex 并将其添加到 1900,1,1 的标量日期时间:

    In [85]:
    import datetime as dt
    import pandas as pd
    df = pd.DataFrame({'date':[42580.3333333333, 10023]})
    df
    
    Out[85]:
               date
    0  42580.333333
    1  10023.000000
    
    In [86]:
    df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + dt.datetime(1900,1,1)
    df
    
    Out[86]:
               date                  real_date
    0  42580.333333 2016-07-31 07:59:59.971200
    1  10023.000000 1927-06-12 00:00:00.000000
    

    好吧,看来 excel 的日期有点奇怪,谢谢@ayhan:

    In [89]:
    df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + dt.datetime(1899, 12, 30)
    df
    
    Out[89]:
               date                  real_date
    0  42580.333333 2016-07-29 07:59:59.971200
    1  10023.000000 1927-06-10 00:00:00.000000
    

    查看相关:How to convert a python datetime.datetime to excel serial date number

    【讨论】:

    • 感谢您的出色回答。有没有办法在同一命令中更改日期以格式化 ddmmyyyy?在这里感谢任何帮助.. 另外,我尝试了我的数据集并注意到使用第一个代码将每个日期增加了 2,但第二个代码给出了正确的日期。
    【解决方案3】:

    你可以在传递给pd.to_datetime之前使用第3方xlrd库:

    import xlrd
    
    def read_date(date):
        return xlrd.xldate.xldate_as_datetime(date, 0)
    
    df = pd.DataFrame({'date':[42580.3333333333, 10023]})
    
    df['new'] = pd.to_datetime(df['date'].apply(read_date), errors='coerce')
    
    print(df)
    
               date                 new
    0  42580.333333 2016-07-29 08:00:00
    1  10023.000000 1927-06-10 00:00:00
    

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2013-04-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      相关资源
      最近更新 更多