Python 读取excel文件时出现Pandas和xlrd错误

Python 读取excel文件时出现Pandas和xlrd错误,python,excel,pandas,xlrd,Python,Excel,Pandas,Xlrd,我一直在编写一个Python脚本,该脚本处理从Excel文件创建数据帧的问题。在过去的几天里,Pandas方法与通常的pd.read\u excel()方法完美结合 今天我一直在尝试运行相同的代码,但遇到了错误。我尝试在一个小测试文档上使用以下代码(只有两列,5行,带有简单整数): 我得到了这个错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> F

我一直在编写一个Python脚本,该脚本处理从Excel文件创建数据帧的问题。在过去的几天里,Pandas方法与通常的
pd.read\u excel()
方法完美结合

今天我一直在尝试运行相同的代码,但遇到了错误。我尝试在一个小测试文档上使用以下代码(只有两列,5行,带有简单整数):

我得到了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\util\_decorators.py", line 296, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 304, in read_excel
    io = ExcelFile(io, engine=engine)
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 867, in __init__
    self._reader = self._engines[engine](self._io)
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_xlrd.py", line 22, in __init__
    super().__init__(filepath_or_buffer)
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 353, in __init__
    self.book = self.load_workbook(filepath_or_buffer)
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_xlrd.py", line 37, in load_workbook
    return open_workbook(filepath_or_buffer)
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\xlrd\__init__.py", line 130, in open_workbook
    bk = xlsx.open_workbook_2007_xml(
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\xlrd\xlsx.py", line 812, in open_workbook_2007_xml
    x12book.process_stream(zflo, 'Workbook')
  File "C:\Users\micro\AppData\Local\Programs\Python\Python39\lib\site-packages\xlrd\xlsx.py", line 266, in process_stream
    for elem in self.tree.iter() if Element_has_iter else self.tree.getiterator():
AttributeError: 'ElementTree' object has no attribute 'getiterator'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
包装器中的文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\pandas\util\\u decorators.py”,第296行
返回函数(*args,**kwargs)
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\pandas\io\excel\u base.py”,第304行,以read\u excel格式
io=ExcelFile(io,engine=engine)
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\pandas\io\excel\\ u base.py”,第867行,在\ uu init中__
self.\u reader=self.\u引擎[引擎](self.\u io)
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\pandas\io\excel\\ uxlrd.py”,第22行,在\uuu init中__
super().\uuuu init\uuuu(文件路径或缓冲区)
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\pandas\io\excel\u base.py”,第353行,在uu init中__
self.book=self.load\u工作簿(文件路径或缓冲区)
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\pandas\io\excel\u xlrd.py”,第37行,在加载工作簿中
返回打开的\u工作簿(文件路径\u或\u缓冲区)
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\xlrd\ \uuuuuu init\uuuuuu.py”,第130行,在open\u工作簿中
bk=xlsx.open\u工作簿\u 2007\u xml(
文件“C:\Users\micro\AppData\Local\Programs\Python\39\lib\site packages\xlrd\xlsx.py”,第812行,在open\u工作簿\u 2007\u xml中
x12book.process_流(zflo,“工作簿”)
文件“C:\Users\micro\AppData\Local\Programs\Python39\lib\site packages\xlrd\xlsx.py”,第266行,在进程流中
对于self.tree.iter()中的元素,如果元素\u具有\u iter else self.tree.getiterator():
AttributeError:'ElementTree'对象没有属性'getiterator'
我在尝试直接使用
xlrd
加载excel文件时遇到了完全相同的问题。我尝试了几种不同的excel文件,并且我所有的pip安装都是最新的

自从上次
pd.read\u excel
工作正常以来,我没有对我的系统进行任何更改(我确实重新启动了我的系统,但没有进行任何更新)。如果相关的话,我正在使用Windows 10计算机


是否还有其他人有此问题?关于如何继续的建议?

可能有许多不同的原因导致此错误,但您应该尝试添加
engine='xlrd'
或其他可能的值(主要是“openpyxl”)。这可能会解决您的问题,因为它更多地取决于excel文件,而不是您的代码


另外,请尝试向文件添加完整路径,而不是相对路径。

openpyxl.utils.exceptions.InvalidFileException
openpyxl
不支持旧的
.xls
文件格式,请使用
xlrd
读取此文件,或将其转换为较新的ng>
.xlsx
文件格式

所以对我来说,论点是:

  • engine=“xlrd”
    上工作.xls
  • engine=“openpyxl”
    .xlsx上工作
    • 这对我很有用

      #Back to linux prompt and install openpyxl
      
      pip install openpyxl
      
      #Add engine='openpyxl' in the python argument
      
      data = pd.read_excel(path, sheet_name='Sheet1', parse_dates=True, engine='openpyxl')
      

      设置
      engine='openpyxl'
      似乎已经解决了这个问题。设置完整路径也很聪明——我通常会这样做,但在示例中使用了更简单的字符串。非常感谢!因为有不同类型的“excel文件”,有不同的解决方案。请查看以了解更多详细信息。@Jordan,感谢您为我们更新了对您有用的答案。这里提到的两个引擎对其他引擎都有帮助!
      #Back to linux prompt and install openpyxl
      
      pip install openpyxl
      
      #Add engine='openpyxl' in the python argument
      
      data = pd.read_excel(path, sheet_name='Sheet1', parse_dates=True, engine='openpyxl')