为何在循环中使用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
相关产品推荐
相关产品推荐

