使用Pandas read_excel读取Excel时工作表索引异常问题求助
LibreOffice保存Excel后Pandas读取工作表索引异常的原因
核心原因
旧版LibreOffice(v6.4.7.2)在将单工作表文件保存为Excel 2007-365格式时,存在格式兼容bug:会自动生成一个命名为1.1.1的隐藏空工作表,且该表在文件内部的存储顺序排在了用户创建的目标工作表之前。
Pandas的read_excel()函数读取xlsx文件时,严格按照文件内部存储的工作表顺序分配索引,并且会读取所有工作表(包括隐藏的),因此就出现了:
sheet_name=0对应那个隐藏的空DataFrame- 实际需要的目标工作表被分配到了
sheet_name=1的位置
验证方式
执行以下代码可以查看文件中所有工作表的名称列表,确认是否存在额外的空表:
import pandas as pd xls = pd.ExcelFile("你的文件路径.xlsx") print(xls.sheet_names)
输出会显示类似['1.1.1', '你的目标工作表名']的结果,证明文件内确实包含两个工作表。
解决办法
- 升级LibreOffice:更新到v7.x及以上版本,新版修复了该xlsx格式兼容问题,保存单工作表时不会生成额外空表。
- 指定工作表名称读取:读取时直接用工作表名称而非索引,避免索引偏移问题,示例代码:
df = pd.read_excel("你的文件路径.xlsx", sheet_name="你的目标工作表名") - 手动清理空表:在LibreOffice中保存前,检查并删除所有隐藏的空工作表,再重新保存文件。
内容的提问来源于stack exchange,提问作者R-obert
相关产品推荐
相关产品推荐

