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

Python遍历DataFrame使用if and条件报KeyError 9如何解决?

报错原因

你的猜测是正确的,KeyError本质是遍历到DataFrame末尾的索引时,row+1、row+2超出了DataFrame的最大索引范围,不存在对应行,所以抛出索引不存在的错误。

可行解决方法

方案1:调整遍历范围(适合小数据量场景)

遍历的时候只遍历到倒数第3行即可,保证row+2不会超出索引范围,同时建议用.loc代替链式索引赋值,避免触发SettingWithCopyWarning:

# 计算最大可遍历的索引,确保row+2不会越界
max_valid_idx = len(df) - 3
for row in df.index:
    if row > max_valid_idx:
        break
    if df.loc[row, 'col1'] == 'b' and df.loc[row+1, 'col1'] == 'name':
        df.loc[row+1, 'col1'] = 'name1'
        df.loc[row+2, 'col1'] = 'name2'

如果你的DataFrame索引不是默认的0开始的连续整数,先重置索引再处理:

df = df.reset_index(drop=True)
# 再执行上面的遍历逻辑即可

方案2:向量化操作(适合大数据量场景,效率更高)

用pandas自带的shift方法匹配相邻行的条件,不需要写循环,性能比遍历高很多:

# 定位满足条件的行位置
mask = (df['col1'] == 'b') & (df['col1'].shift(-1) == 'name')
# 给对应下一行、下两行赋值
df.loc[mask.shift(1, fill_value=False), 'col1'] = 'name1'
df.loc[mask.shift(2, fill_value=False), 'col1'] = 'name2'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:45:02