You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:27:03