Pandas两Series比对时'not in'运算符失效返回全列表问题求解
问题原因
in 和 not in 运算符作用于pandas Series对象时,默认判断的是元素是否存在于Series的索引列表中,而非Series存储的数值列表中。你的代码逻辑实际是判断list1的元素是否不是list2的索引,而不是判断是否不在list2的数值里,判断条件完全不符合需求,所以会输出完整的list1内容。
解决方法
你可以根据场景选择以下任意一种方案:
- 方案1:修改原有循环逻辑,明确指定判断Series的数值列表,只需要调整判断条件即可:
for i in list1: if i not in list2.values: print(i)
- 方案2:使用pandas内置的
isin()矢量化方法,数据量较大时效率远高于循环,是更推荐的pandas风格写法:
# 筛选得到仅在list1中存在的元素组成的Series only_in_list1 = list1[~list1.isin(list2)] # 打印结果 print(only_in_list1)
- 方案3:转成集合求差集,适合不需要保留list1原有顺序、允许结果去重的场景:
only_in_list1 = set(list1) - set(list2) print(only_in_list1)
内容的提问来源于stack exchange,提问作者halid.sert
相关产品推荐
相关产品推荐

