将 xlsb 文件读取为 pandas 数据框并将日期列解析为日期时间格式

Posted

技术标签:

【中文标题】将 xlsb 文件读取为 pandas 数据框并将日期列解析为日期时间格式【英文标题】:read xlsb file as pandas dataframe and parse the date column as datetime format 【发布时间】:2021-09-02 00:43:37 【问题描述】:

我有一个包含大约 10 列的“some.xlsb”文件,其中 2 列是 DateTime 列。

当我使用 pandas 加载时,日期时间列会以不同的形式解析。

解释:

其中DateTime 值对应于4/10/2021 11:50:24 AM - 读作44296.5

下面是我试过的代码。

goods_df = pd.read_excel('some.xlsb',
                   engine='pyxlsb', sheet_name='goods_df')

goods_df_header = goods_df.iloc[1]
goods_df.columns = goods_df_header #set the header row as the df header
goods_df= goods_df[2:]
goods_df.head(2)

【问题讨论】:

您可能希望在导入后对日期时间进行解析,请参见例如Convert Excel style date with pandas. 【参考方案1】:

当您使用 pandas 读取 xlsb 文件时,您将获得 excel 时间浮点值,因为 xlsb 在存储之前将日期时间对象转换为浮点值。

根据 Microsoft 44296.5 表示自 1900 年 1 月 1 日以来已过去 44296.5 天。

您需要将其转换为纪元,然后使用以下公式确定日期(纪元值 = 自 1970 年 1 月 1 日 00:00:00 以来经过的秒数)。

a = datetime.datetime.strftime((int(<datevalue from excel>)*86400)-2207520000, "%m/%d/%Y")

或者您可以将此 xlsb 保存为 xlsx 并阅读它,您将获得准确的日期时间对象。

【讨论】:

以上是关于将 xlsb 文件读取为 pandas 数据框并将日期列解析为日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

以科学记数法将带有科学记数法的文本文件读取到 pandas 数据框

使用 pandas 和 pyxlsb 以 xlsb 文件格式(Excel 二进制文件格式)写入输出

读取多个 csv 文件并将文件名添加为 pandas 中的新列

如何在streamlit中从用户读取csv文件并转换为pandas数据框

Pandas 将文件名存储在列表中,并将所有文件读入数据框

将 Excel 文件读取到 pandas 数据框的更快方法