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

Pandas删除first_name、last_name空值行报KeyError[0]如何解决?

报错原因
  • 核心问题是遍历DataFrame过程中直接原地删除行:iterrows()会基于遍历开始时的DataFrame索引迭代,当你调用df.drop(index, inplace=True)删除行后,DataFrame的索引会动态更新,后续迭代到已被删除的索引时,就找不到对应行,抛出KeyError。
  • 原有代码还存在逻辑缺陷:若一行存在多个空列,会重复触发删除逻辑,且拒绝原因的格式也不符合要求。
修复实现

不要边遍历边修改原DataFrame,先统一收集错误行的索引和原因,再批量拆分数据即可,示例代码如下:

import pandas as pd

# 待校验的列
check_cols = ['first_name', 'last_name']
error_indexes = []
error_reasons = []

# 第一步:遍历收集所有错误信息,不修改原表
for idx, row in df.iterrows():
    empty_cols = []
    for col in check_cols:
        # 判断是否为空(空字符串/NaN都算)
        if row[col] == '' or pd.isna(row[col]):
            empty_cols.append(col)
    if empty_cols:
        error_indexes.append(idx)
        error_reasons.append(f'{empty_cols} is empty')

# 第二步:生成错误表
error_df = df.loc[error_indexes].copy()
error_df['rejection_reason'] = error_reasons

# 第三步:生成清洗后的正常表
df = df.drop(error_indexes).copy()

运行后df就是你要的正常输出结果,error_df就是错误表,和预期输出完全一致。

内容的提问来源于stack exchange,提问作者Naveen Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:02