Pandas的read_excel/to_csv是否存在Excel导入行数限制?
问题结论
pandas.read_excel()与pandas.to_csv()不存在内置的行数上限限制,你遇到的行缺失问题,和这两个方法的行数限制无关,基本是代码写法缺陷、读取引擎bug或者源文件格式异常导致的。
你当前代码的核心问题
- 循环中使用
DataFrame.append()做拼接是主要风险点:该方法从pandas 1.4.0版本开始已被正式废弃,在处理多表、大数据量拼接时,若不同工作表的列类型、列顺序不完全匹配,很容易出现静默的数据截断、丢行问题,且不会抛出任何报错。 - 未显式指定读取参数时,默认Excel引擎会自动判定有效数据区域:针对
.xlsx文件pandas默认调用openpyxl引擎,老版本openpyxl遇到工作表内的合并单元格、隐藏行、整行空值、异常格式单元格时,会错误判定数据边界,提前终止读取。
修正后的稳定实现代码
import pandas as pd # 读取阶段显式指定引擎和参数,避免引擎自动判定数据边界导致的丢行 sheets_dict = pd.read_excel( io="C:/ExcelSheets.xlsx", sheet_name=None, engine="openpyxl", data_only=True, read_only=False ) processed_sheets = [] for sheet_name, df in sheets_dict.items(): # 跳过完全无数据的空工作表 if df.empty: continue # 新增工作表名列,处理列名换行 df["sheet"] = sheet_name df.columns = [str(col).split("\n")[-1] for col in df.columns] processed_sheets.append(df) # 一次性拼接所有工作表,替代循环append full_table = pd.concat(processed_sheets, ignore_index=True) # 导出CSV时关闭索引写入,指定通用编码避免写入异常 full_table.to_csv( path_or_buf="TestReport.csv", index=False, encoding="utf-8-sig" )
问题排查步骤
- 第一步先定位丢行发生的阶段:读取完所有工作表后,直接循环打印每个表的行数
for sheet_name, df in sheets_dict.items(): print(f"工作表{sheet_name}读取行数:{len(df)}"),和源Excel的实际行数对比,确认是读取阶段丢行,还是拼接、导出阶段丢行。 - 如果是读取阶段就出现行数缺失,先把openpyxl升级到最新版本:执行命令
pip install --upgrade openpyxl,绝大多数读取截断问题都是老版本引擎的边界判定bug导致的。 - 如果源文件存在被筛选隐藏的行、大量零散空单元格,读取时可以增加参数
keep_default_na=False,减少空值判定异常带来的读取截断。
内容的提问来源于stack exchange,提问作者ManOAction
相关产品推荐
相关产品推荐

