Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python excel中的日期转换为文本,反之亦然_Python_Excel_Pandas_Datetime_Python Datetime - Fatal编程技术网

Python excel中的日期转换为文本,反之亦然

Python excel中的日期转换为文本,反之亦然,python,excel,pandas,datetime,python-datetime,Python,Excel,Pandas,Datetime,Python Datetime,我看到excel用特定的序列号标识日期。例如: 09/07/2018 = 43290 10/07/2018 = 43291 我知道我们使用DATEVALUE、VALUE和TEXT函数在这些类型之间进行转换 但这种转换背后的逻辑是什么?为什么43290用于09/07/2018? 另外,如果我在数据框架(Python)中有一个数字格式的日期列表,如何将该数字转换为日期格式? 与时间类似,我看到十进制值代替常规时间格式。这些时间转换背后的逻辑是什么 评论中给出的以下问题提供了信息,但

我看到excel用特定的序列号标识日期。例如:

    09/07/2018 = 43290
    10/07/2018 = 43291
我知道我们使用
DATEVALUE
VALUE
TEXT
函数在这些类型之间进行转换

但这种转换背后的逻辑是什么?为什么
43290
用于
09/07/2018

另外,如果我在
数据框架(Python)中有一个数字格式的日期列表,如何将该数字转换为日期格式?

与时间类似,我看到十进制值代替常规时间格式。这些时间转换背后的逻辑是什么

评论中给出的以下问题提供了信息,但没有回答我关于日期和文本格式转换背后的逻辑的问题:

这只是自1900年1月1日以来的天数(或天数的分数,如果谈论日期和时间):

DATEVALUE函数将存储为文本的日期转换为 Excel识别为日期的序列号。例如 公式=DATEVALUE(“1/1/2008”)返回 日期:2008年1月1日。但请记住,您的计算机的系统日期 设置可能会导致DATEVALUE函数的结果从 这个例子

Excel将日期存储为连续序列号,以便在计算中使用。默认情况下,1900年1月1日是序列号1,2008年1月1日是序列号39448,因为它是1900年1月1日之后的39447天

如果我在数据框中有数字格式的这些日期列表 (Python),如何将此数字转换为日期格式

由于我们知道该数字表示自1900年1月1日起的天数,因此可以轻松地将其转换为日期:

from datetime import datetime, timedelta

day_number = 43290

print(datetime(1900, 1, 1) + timedelta(days=day_number - 2))
#  2018-07-09 00:00:00                                   ^ subtracting 2 because 1/1/1900 is
#                                                          "day 1", not "day 0"

但是,
pd.read\u excel
应该能够自动处理此问题。

是的。这差不多就是总结。实际上,这些数据存在于xlsb文件中。由于没有名为read_xlsb的函数,我编写了一个函数来读取它。但结果是,不知怎的,这个日期被转换成了数字格式,所以读取excel不会有帮助。不过,您的解决方案目前似乎运行良好。时间呢?例如,
0.516550926
指的是
12:23:50
。如何执行此转换?这背后的逻辑是什么?