为何Python的pandas读取Excel时会导入无数据的空白行?
问题原因
该问题通常是由于异常工作表中曾经在末尾16行的位置输入过内容,后续删除内容后Excel没有自动重置已使用区域,导致pandas读取时将这些标记为已使用的空白行一并加载,表现为全NaN的无效行。
可行解决方案
方案1:读取后过滤全空行(最通用,无需修改源文件)
直接调用pandas内置方法删除全为空值的行,不会影响有任意有效内容的行,也不需要提前知道有效数据行数:
df = pd.read_excel( data, sheet_name=sheets ) df = df.iloc[:, 0:11] # 新增以下代码删除全空行,重置索引避免断层 df = df.dropna(how='all').reset_index(drop=True)
如果你的业务场景中第一列是不会为空的主键,也可以用更严格的过滤规则,避免出现部分列有内容的无效行被误保留:
# 仅保留第一列不为空的行 df = df[df.iloc[:, 0].notna()].reset_index(drop=True)
方案2:读取时限定加载范围(从读取环节避免加载空白行)
可以通过read_excel的nrows参数配合工作表有效行数计算实现,也可以直接指定需要加载的行范围:
# 先读取工作表的元数据获取有效行数,再正式读取内容 from openpyxl import load_workbook wb = load_workbook(data, read_only=True) ws = wb[sheets] # 计算实际有内容的行数 max_row = 0 for row in ws.iter_rows(values_only=True): if any(row): max_row +=1 wb.close() # 正式读取时指定行数 df = pd.read_excel( data, sheet_name=sheets, nrows=max_row ) df = df.iloc[:, 0:11]
方案3:修复源Excel(治本方案)
如果有权限修改源Excel文件,直接打开异常工作表,选中末尾16行及之后的所有空白行,右键选择「删除整行」后保存文件,后续读取就不会再出现多余空白行,无需修改代码。
注意事项
- 过滤全空行时务必使用
how='all'参数,不要使用how='any',避免误删包含个别空列的有效数据行 - 调整代码后可以打印
df.shape核对行数是否符合预期
内容的提问来源于stack exchange,提问作者tdawg
相关产品推荐
相关产品推荐

