Python Pandas-从read_excel转换十进制日期

Python Pandas-从read_excel转换十进制日期,python,excel,pandas,Python,Excel,Pandas,我已经在csv中使用熊猫转换了一些excel文件。我注意到现在日期是十进制的。但是,我不清楚如何转换为datetime或至少转换为timestamp 因此,转换日期如下所示: 42794.741667 我知道小数点之前是1900年以后的日子,但我找不到任何关于小数点第二部分的信息。许多问题建议直接从read_excel转换:。但是,我不能这样做,因为excel文件非常复杂,没有预定义的结构。excel日期不是从1970年开始的几天,而是从1899年12月30日开始的几天。(您可能会想到Posi

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

因此,转换日期如下所示:

42794.741667

我知道小数点之前是1900年以后的日子,但我找不到任何关于小数点第二部分的信息。许多问题建议直接从read_excel转换:。但是,我不能这样做,因为excel文件非常复杂,没有预定义的结构。

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

Excel报告第一天为1900年1月1日(这意味着一个纪元为1899年12月31日),但Excel也认为1900年是闰年,而事实并非如此,因此Excel的计数在1900年1月1日至1900年2月28日之间的日期为1

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

您可以将Excel日期转换为Python
datetime
s,而
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电子表格中并将其格式化为日期,则可以确认转换。

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

Excel报告第一天为1900年1月1日(这意味着一个纪元为1899年12月31日),但Excel也认为1900年是闰年,而事实并非如此,因此Excel的计数在1900年1月1日至1900年2月28日之间的日期为1

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

您可以将Excel日期转换为Python
datetime
s,而
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电子表格中并将其格式化为日期,则可以确认转换