Python中含特殊字符的DataFrame列in判断失效问题及解决方法咨询
解决DataFrame列元素判断全部返回“不存在”的问题
嘿,我明白你遇到的问题了——明明看着列表里的元素和DataFrame COL1列里的内容完全一致,但循环判断的时候全返回了“not in df”,一开始还以为是特殊字符搞的鬼对吧?其实问题出在你判断的方式上,和特殊字符没关系!
问题根源
你写的if element in df['COL1'],Python其实是在检查这个元素是不是Series的索引值,而不是检查它是否存在于Series的实际数据值里。这就是为什么哪怕内容完全匹配,也会返回False的原因。
解决方法
这里有几种靠谱的方式可以修正这个判断逻辑:
方法1:直接检查Series的值数组
把判断条件改成element in df['COL1'].values,这样就会直接去匹配列里的实际数据了:
for element in the_list: if element in df['COL1'].values: print(element, " in df") else: print(element, " not in df")
方法2:使用pandas的isin()方法
利用pandas自带的isin()函数,配合any()来判断是否存在匹配:
for element in the_list: if df['COL1'].isin([element]).any(): print(element, " in df") else: print(element, " not in df")
方法3:提前转成集合(高效推荐)
如果你的列表或者DataFrame数据量比较大,提前把COL1的值转成集合会大幅提升查询速度——集合的成员检查是O(1)的,比直接遍历Series快很多:
# 先把COL1的值转成集合 col1_values = set(df['COL1'].values) for element in the_list: if element in col1_values: print(element, " in df") else: print(element, " not in df")
验证结果
用上面任意一种方法修改后,就能得到你预期的输出:
jcf7180001991334_2-HSPs_+__SP_1 in df
not_in_tab1 not in df
jcf7180001991334:23992-26263(+):SP_2 in df
not_intab2 not in df
not_intab3 not in df
jcf7180001988059:2889-4542(-):SP_3 in df
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

