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

为何在循环中使用df.loc会触发KeyError错误?

问题原因分析

直接遍历DataFrame时,迭代的是列名而非行索引。你的代码里,for row in example_data_df会依次取出'ID'和'score'两个列名,执行example_data_df.loc[row,'ID']时,相当于用列名作为行索引去查找,但你的行索引是0-5的整数,自然找不到对应行,触发KeyError: 'ID'。

而循环外row=1是有效的行索引,所以loc[row,'ID']能正常取出对应行的ID值。

正确的行遍历方式(若必须用循环)

如果确实需要遍历行,有两种常用正确写法:

  • 遍历行索引:
for row in example_data_df.index:
    print(example_data_df.loc[row,'ID'])
  • 遍历行对象(使用iterrows()):
for idx, row in example_data_df.iterrows():
    print(row['ID'])
实际需求的最优解法:无需循环,用Pandas向量化操作

你要将B的特定列追加到A,仅保留两表某列值匹配的行,完全不需要循环,pd.merge可以高效实现:

假设匹配列是'ID',要从B追加到A的列是'target_col':

  • 若要仅保留A和B中ID都存在的行(内连接):
merged_df = pd.merge(A, B[['ID', 'target_col']], on='ID', how='inner')
  • 若要保留A的所有行,仅追加B中匹配到的列值,未匹配项填充NaN(左连接):
merged_df = pd.merge(A, B[['ID', 'target_col']], on='ID', how='left')

这种向量化操作比循环效率高得多,尤其适合数据量较大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:12:02