如何使带有 engine='openpyxl' 的 pandas.read_excel 表现得像使用 xlrd 一样,默认情况下不显示纳秒?

Jef*_*f G 6 python excel pandas openpyxl

我们有一个从 Excel .xlsx 电子表格读取数据到 Pandas DataFrame 的过程。在尝试升级到最新版本 (1.2.1) 的 pandas 时,我在 pandasread_excel函数的文档中看到了以下engine参数:

  • “openpyxl”支持较新的 Excel 文件格式。

在 1.2.0 版更改:引擎 xlrd 现在仅支持旧式 .xls 文件。

所以,我添加engine='openpyxl'到我的read_excel函数调用中并开始看到奇怪的新行为,现在日期时间值默认显示纳秒,而xlrd. 最重要的是,我发现日期时间与 Excel 中的预期值相差几纳秒。我在熊猫 1.2.1 和 1.1.4 上看到了同样的事情。

对于以下 Excel 数据(9/24 日期的原始值显示为 44098.0416666667,9/9 日期的原始值显示为 44083.6847222222)

在此处输入图片说明

我看到以下行为:

>>> import pandas as pd
>>> pd.read_excel('~/testDatetimeNanos.xlsx')
             TestDate
0 2020-09-24 01:00:00
1 2020-09-09 16:26:00
2 2020-09-09 16:26:00
>>> pd.read_excel('~/testDatetimeNanos.xlsx', engine='openpyxl')
                    TestDate
0 2020-09-24 01:00:00.000003
1 2020-09-09 16:25:59.999998
2 2020-09-09 16:26:00.000000
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法使用新的 openpyxl 引擎,使其行为与旧的 xlrd 引擎一致......?
另外,想知道我是否可能偶然发现了一个错误(更新:提交了错误报告)。

Par*_*ark 1

无论 openpyxl 的引擎和版本如何,您都可以像这样简单地删除纳秒:

df['testDate'] = df['testDate'].str[:-7]

#              testDate
#0  2020-09-24 01:00:00
#1  2020-09-09 16:25:59
#2  2020-09-09 16:26:00
Run Code Online (Sandbox Code Playgroud)