使用not in判断pandas Series元素不存在却返回全列表如何解决
问题原因
in/not in运算符作用于pandas.core.series.Series类型时,默认判断的是元素是否存在于序列的索引中,而非序列的存储值,这就是你的代码逻辑完全不符合预期的核心原因。
解决方案
方法1:使用pandas原生矢量化方法(推荐,性能最优)
直接调用isin()方法匹配后取反即可,无需手动写循环,适合所有数据规模的场景:
# 提取list1中不存在于list2的所有元素 result = list1[~list1.isin(list2)] # 打印结果 print(result)
如果需要得到Python原生列表类型的结果,加.tolist()即可:
result_list = list1[~list1.isin(list2)].tolist()
方法2:修改循环写法适配Series特性
如果必须保留循环写法,需要先把对比的Series值转为集合再做成员判断,集合的成员查询效率远高于列表:
# 提前把list2的取值转成集合,避免每次循环都遍历全量数据 list2_values = set(list2) for i in list1: if i not in list2_values: print(i)
内容的提问来源于stack exchange,提问作者Bintang Karmila Gulo 214210193
相关产品推荐
相关产品推荐

