Pandas 无法打开 Excel (.xlsx) 文件
问题描述
当使用 Pandas 的 read_excel()
方法打开 .xlsx
文件时,可能会遇到以下错误:
python
import pandas
df = pandas.read_excel('cat.xlsx')
错误信息显示:
xlrd.biffh.XLRDError: Excel xlsx file; not supported
这个错误表示当前安装的 xlrd 库不再支持 .xlsx
格式的 Excel 文件。
根本原因
从 xlrd 2.0.0 版本开始,该库明确移除了对 .xlsx
文件的支持,只保留了对旧版 .xls
格式的支持。这是由于安全漏洞问题,使用 xlrd 1.2.0 或更早版本读取 .xlsx
文件可能存在安全风险。
解决方案
方案一:推荐方法 - 使用 openpyxl 引擎
最安全且推荐的方法是安装 openpyxl
库,并明确指定使用它作为读取引擎:
python
import pandas as pd
# 安装 openpyxl: pip install openpyxl
df = pd.read_excel('cat.xlsx', engine='openpyxl')
提示
对于包含多个工作表的情况,也可以使用 ExcelFile
构造函数:
python
xlsx = pd.ExcelFile('cat.xlsx', engine='openpyxl')
df = pd.read_excel(xlsx, sheet_name='Sheet1')
方案二:升级 Pandas 版本
从 Pandas 1.2.0 版本开始,库已经自动处理了 xlrd 的限制。升级到最新版本可以解决此问题:
bash
pip install --upgrade pandas
注意
即使升级了 Pandas,仍然建议使用 openpyxl
引擎来确保最佳的兼容性和性能。
方案三:不推荐 - 降级 xlrd
虽然技术上可行,但不推荐此方法,因为它存在安全风险:
bash
pip install xlrd==1.2.0
警告
降级到 xlrd 1.2.0 或更早版本可能存在安全漏洞,并且某些 .xlsx
文件的解析可能不准确。建议仅在无法使用其他方法的情况下考虑此方案。
最佳实践
- 检查当前环境:确认已安装的库版本
python
import pandas as pd
print(f"Pandas version: {pd.__version__}")
# 检查是否已安装 openpyxl
try:
import openpyxl
print("openpyxl is installed")
except ImportError:
print("openpyxl is not installed")
- 一次性安装所有依赖:
bash
pip install pandas openpyxl
- 明确指定引擎:在所有
read_excel()
调用中明确指定engine='openpyxl'
总结
解决 Pandas 无法读取 .xlsx
文件的问题,最安全有效的方法是:
- 确保 Pandas 版本在 1.0.1 或更高
- 安装
openpyxl
库 - 在读取 Excel 文件时明确指定
engine='openpyxl'
这种做法既解决了兼容性问题,又避免了潜在的安全风险,是当前处理 .xlsx
文件的最佳实践。