如何在Python中基于一列的值查找另一列的完全匹配项
问题说明
现有包含A、B两列的示例DataFrame如下:
A B 123 555 456 123 789 666
需要筛选输出同时存在于B列中的A列值,示例对应输出为123。
原有代码运行时报错argument of type 'float' is not iterable。
错误原因
- 逻辑误区:原有代码中
row.A in row.B是判断当前行的A值是否属于当前行的B值,而需求是判断当前A值是否属于整个B列的所有值,二者逻辑完全不符 - 语法报错原因:
row.B是单个数值(报错提示float大概率是实际数据中存在缺失值,被pandas自动转为float类型),in运算符要求右侧是可迭代对象,单个数值无法迭代,因此触发报错。
正确实现方法
优先推荐pandas向量化操作,执行效率远高于遍历行的写法:
# 筛选出A列值在B列中存在的行,提取A列值 result = df.loc[df['A'].isin(df['B']), 'A'] # 打印结果 print(result)
如果需要输出为列表格式,可以追加.tolist()方法。
如果一定要调整原有遍历写法,修改如下即可运行,但不推荐用于1000行以上的DataFrame:
# 提前把B列的值转成集合,判断存在的效率更高 b_values = set(df['B'].values) for i, row in df.iterrows(): if row.A in b_values: print(row.A)
内容的提问来源于stack exchange,提问作者Aytaj Ahmadova
相关产品推荐
相关产品推荐

