使用Pandas read_excel/ExcelFile导入Excel触发AttributeError求助
解决Pandas读取Excel时出现的
AttributeError: 'Book' object has no attribute 'extract_formulas' 你遇到的问题核心是Pandas与xlrd版本不兼容,和Python 3.6/3.7的版本差异没有直接关系,本质是两个环境里安装的依赖包版本组合不一致。
错误原因分析
这个报错是因为你的Python 3.6环境中,xlrd的版本和Pandas版本不匹配:旧版本的Pandas会调用xlrd Book对象的extract_formulas属性,但新版xlrd(比如2.x及以上)已经移除了这个属性;反过来如果xlrd版本过旧,而Pandas版本相对较新,也可能出现属性不匹配的情况。虚拟机的Python 3.7环境刚好安装了兼容的版本组合,所以没触发错误。
具体解决方案
试试下面的步骤修复:
检查当前环境的包版本
在命令行运行以下命令,查看Pandas和xlrd的版本:# Windows系统 pip list | findstr pandas pip list | findstr xlrd # 类Unix系统 pip list | grep pandas pip list | grep xlrd安装兼容的xlrd版本
最稳妥的方式是安装xlrd 1.2.0版本(这个版本和大多数支持Python 3.6的Pandas版本兼容):pip uninstall xlrd -y pip install xlrd==1.2.0替代方案:用openpyxl读取xlsx文件
如果你要读取的是.xlsx格式文件,也可以改用openpyxl作为引擎,绕开xlrd的版本问题:
先安装openpyxl:pip install openpyxl然后修改代码指定引擎参数:
headers = pd.ExcelFile(r"\\sfcfile-2\DataModule\IL\leasing.contract.extract.new headers.xlsx", engine='openpyxl')
为什么虚拟机没问题?
虚拟机的Python 3.7环境中,Pandas和xlrd的版本组合是兼容的——比如虚拟机里安装的xlrd是1.x版本,或者Pandas版本适配了xlrd的API变化,所以没有触发这个属性错误。
内容的提问来源于stack exchange,提问作者NateO




