使用 pandas 转换 Excel 样式日期

新手上路,请多包涵

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

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

原文由 user1056212 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
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

原文由 EdChum 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以直接使用 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]

进一步阅读:

原文由 FObersteiner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题