熊猫-从read_excel

时间:2019-01-29 17:36:31

标签: python excel pandas

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

因此转换后的日期如下:

42794.741667

我知道小数点前是1900年的日子,但是我找不到关于小数点后半部分的任何信息。许多问题建议直接从read_excel转换:pandas automatically converting date。但是,我无法做到这一点,因为excel文件非常复杂并且没有预定义的结构。

1 个答案:

答案 0 :(得分:2)

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

Excel报告第1天为1900年1月1日(这意味着1899年12月31日),但是Excel还认为1900年是a年,但实际上不是,所以Excel的计数减少了一个适用于1900年1月1日至1900年2月28日之间的日期。

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

您可以将Excel日期转换为datetime可以理解的Python pandas

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

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