Pandas 无法打开 Excel (.xlsx) 文件

LNQ*_*LNQ 123 python excel pandas

请看我下面的代码:

import pandas
df = pandas.read_excel('cat.xlsx')
Run Code Online (Sandbox Code Playgroud)

运行后,它给了我以下错误:

Traceback (most recent call last):
  File "d:\OneDrive\??\practice.py", line 4, in <module>
    df = pandas.read_excel('cat.xlsx')
  File "D:\python\lib\site-packages\pandas\util\_decorators.py", line 296, in wrapper
    return func(*args, **kwargs)
  File "D:\python\lib\site-packages\pandas\io\excel\_base.py", line 304, in read_excel
    io = ExcelFile(io, engine=engine)
  File "D:\python\lib\site-packages\pandas\io\excel\_base.py", line 867, in __init__
    self._reader = self._engines[engine](self._io)
  File "D:\python\lib\site-packages\pandas\io\excel\_xlrd.py", line 22, in __init__
    super().__init__(filepath_or_buffer)
  File "D:\python\lib\site-packages\pandas\io\excel\_base.py", line 353, in __init__
    self.book = self.load_workbook(filepath_or_buffer)
  File "D:\python\lib\site-packages\pandas\io\excel\_xlrd.py", line 37, in load_workbook
    return open_workbook(filepath_or_buffer)
  File "D:\python\lib\site-packages\xlrd\__init__.py", line 170, in open_workbook
    raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
xlrd.biffh.XLRDError: Excel xlsx file; not supported
Run Code Online (Sandbox Code Playgroud)

我尝试使用 pip 命令卸载并重新安装 Pandas。错误仍然存​​在。我安装了 xlrd 2.0.1 和 Pandas 1.1.5。

Chr*_*ers 195

发布电子邮件中所述,从发布推文链接到并在文档首页出现的大橙色警告中指出,橙色警告较少但仍存在于repo自述文件pypi 上发布中

xlrd 已明确删除对 xls 文件以外的任何内容的支持。

这是由于与使用xlrd1.2 或更早版本读取.xlsx文件相关的潜在安全漏洞。

在您的情况下,解决方案是:

编辑:目前,pandas >= 1.2 解决了这个问题。(发行说明)

  • 这是一个关于如何“不”应该发布版本的典型示例。此更改破坏了许多现有代码,并且我不记得曾经在 xlrd 读取 xlsx 文件时看到过弃用警告。如果我是你,我会很快发布一个支持 xlsx 文件的新版本,并给出一个非常明确的弃用警告,指出*下一个*版本将不支持它。你知道,这将使人们有时间在系统崩溃之前对其进行修复。人们通常不会阅读软件包自述文件或收听有关读取 Excel 文件的软件包的推文。这不是通知他们的正确方式。 (49认同)
  • @ChrisWithers 抱歉,感谢您的辛勤工作。请理解,您的库主要用作依赖项,我们不会去搜索每个依赖项的页面,这就是您的消息可见性较低的原因。我们可以简单地将 `engine="openpyxl"` 传递给 `pd.ExcelFile`,但是您的库以不同的方式解析 excel 文件,并且编写代码时考虑到了这一点,这意味着修复起来并不简单。警告应该在代码中的装饰器中。我希望我知道,但我不知道。再次感谢您的工作。会支持。 (5认同)
  • openpyxl 有很多怪癖,使用它是一种巨大的痛苦。如果 Excel 文件的 DateTime 列不够宽,Excel 将输出替换为模板“XXXX”...并且 openpyxl 尝试返回模板对象而不是数据,这会导致一切崩溃。这只是我在使用 openpyxl 时发现的众多问题之一......除了手动修改文件之外没有解决方案,这对于大数据来说是一个很大的禁忌。 (5认同)
  • 整个库的弃用警告已经一年多了,四年前就发布了相关公告。阅读文档和邮件列表公告对于此类问题非常重要。这里所需的更改是微不足道的,特别是考虑到潜在的安全漏洞。 (4认同)

LNQ*_*LNQ 42

最新版本的 xlrd (2.0.1) 仅支持 .xls 文件。

如果您准备冒潜在的安全漏洞,并冒着错误解析某些文件的风险,则可以通过安装旧版本的 xlrd 来解决此错误。

在 shell 或 cmd 提示符下使用以下命令:

pip install xlrd==1.2.0
Run Code Online (Sandbox Code Playgroud)

  • 拥有一个不支持 Excel 文件的 Excel 模块是多么非常有用。 (41认同)
  • 需要明确的是,作为这个包的作者,我可以有把握地说这是一个非常危险的建议。xlsx 支持被删除的原因是它存在潜在的安全漏洞并且没有人维护它。如果您选择这种方法,而不是简单地切换到 openpyxl,那么您将面临接触这些方法的风险。 (22认同)
  • 返回到 `xlrd==1.2.0` 版本有效。谢谢https://exerror.com/xlrd-biffh-xlrderror-excel-xlsx-file-not-supported/ (4认同)
  • @painoman102:也许您可以阅读自述文件,或软件包的发行说明,或发行电子邮件,以了解原因? (3认同)
  • @ChrisWithers不幸的是,openpyxl似乎根本不适用于我正在使用的excel文件。它完全无法解析并且总是返回一个空数据帧。 (3认同)