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

pandas遍历DataFrame按条件取值报KeyError:0如何解决

报错原因

触发KeyError: 0的核心问题是索引引用方式错误:你写的data['test'][i]属于链式索引,方括号中传入的i会被识别为索引标签而非行位置,一旦DataFrame的索引不是从0开始的连续整数(比如做过筛选、排序、分组重置等操作后),就会找不到对应标签触发KeyError。
另外你贴出的DataFrame创建代码末尾缺失一个闭合右括号,也会触发语法错误。

解决方法

方法1:修正原有循环逻辑(仅做问题修复,不推荐生产环境使用)

使用.iloc按行位置取值,同时补全代码缺失的语法符号,逻辑和你原有写法完全一致:

import pandas as pd
# 补全缺失的右括号
data = pd.DataFrame({"test":[12, 4, 5, 4, 1, 3, 2, 5, 10, 9]})

oxygen = []
for i in range(len(data)):
    val = data['test'].iloc[i]
    oxygen.append(4 if val >=4 else val)

运行后即可得到预期输出[4,4,4,4,1,3,2,4,4,4]。

方法2:pandas向量化实现(推荐,代码简洁性能高)

这类批量阈值判断逻辑不需要手写for循环,直接用pandas内置方法即可实现,性能比手写循环高数十倍,还能规避绝大多数索引相关报错:

  • 用clip方法直接设置数值上限为4,最后转列表即可:
oxygen = data['test'].clip(upper=4).tolist()
  • 也可以用条件判断方法where实现,效果完全一致:
oxygen = data['test'].where(data['test'] < 4, 4).tolist()

提示:处理pandas批量数据时优先使用内置向量化接口,尽量避免手写逐行循环,能减少90%以上的索引、取值类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:09:15