Pandas - 从 read_excel 转换十进制日期

Gui*_*oni 0 python excel pandas

我已经使用 pandas 转换了一些 csv 文件。我注意到日期现在是十进制格式。但是,我不清楚如何转换为datetime或至少转换为时间戳。

所以转换后的日期看起来像:

42794.741667
Run Code Online (Sandbox Code Playgroud)

我知道小数点之前是从 1900 年开始的天数,但我没有找到任何有关小数点第二部分的信息。很多问题建议直接从read_excel转换:pandas自动转换date。但是,我不能这样做,因为 Excel 文件非常复杂并且没有预定义的结构。

Boa*_*les 5

Excel 日期不是从 1970 年开始的日期,而是从 1899 年 12 月 30 日开始的日期。(您可能会想到 Posix 时间戳,即从 1970 年 1 月 1 日起的秒数)。

Excel 将第 1 天报告为 1900 年 1 月 1 日(这意味着纪元为 1899 年 12 月 31 日),但 Excel 还认为 1900 年是闰年,但事实并非如此,因此 Excel 的计数会在 1900 年 1 月 1 日和1900 年 1 月 1 日和 1900 年 2 月 28 日。

这种行为是故意的。早期,Excel 与市场领导者 Lotus 1-2-3 竞争,Lotus 1-2-3 也认为 1900 年是闰年,当人们开始关心它时,它被认为具有太大的破坏性而无法修复。

您可以将 Excel 日期转换为 Python datetime,其pandas理解如下:

>>> import datetime
>>> datetime.datetime(1899,12,30) + datetime.timedelta(days=42794.741667)
datetime.datetime(2017, 2, 28, 17, 48, 0, 28800)
Run Code Online (Sandbox Code Playgroud)

如果将 42794.741667 粘贴到空的 Excel 电子表格中并将其设置为日期格式,则可以确认转换。