Pandas DataFrame过滤无结果:值存在却返回0条记录排查
解决DataFrame过滤不到存在值的问题
嘿,这种明明值就在那却过滤不出来的情况真的挺挠人的,我之前也碰到过几次,大多是字符串的小细节在搞鬼,咱们一步步来排查:
检查字符串前后的空白字符:
很多时候数据里会混入看不见的空格、制表符或者换行符,导致字面看起来一样的字符串实际不相等。你可以先试试带strip()的过滤:df[df['blah_id'].str.strip() == 'blahMEB'].head()或者直接查看目标值的长度,和正常的
'blahMEB'(长度为7)对比:print(len(df.blah_id.loc[20])) # 看看输出是不是7 print(len('blahMEB')) # 正常输出应为7如果长度不一样,就说明有隐藏字符在里面。
确认大小写完全匹配:
虽然你的示例里看起来大小写一致,但有时候可能存在肉眼难辨的差异(比如某个字母大小写写错),可以统一转换为小写或大写再比较:df[df['blah_id'].str.lower() == 'blahmeb'].head()检查目标值的数据类型:
虽然列的dtype是object,但里面的元素可能混合了字符串和数字类型。你可以先查看目标位置的值类型:print(type(df.blah_id.loc[20])) # 正常应该输出<class 'str'>如果不是字符串类型,建议先把整列转换为字符串再过滤:
df['blah_id'] = df['blah_id'].astype(str) df[df['blah_id'] == 'blahMEB'].head()用
isin方法测试过滤:
有时候直接用==比较可能因为隐式转换失效,试试用isin方法来匹配:df[df['blah_id'].isin(['blahMEB'])].head()查看所有唯一值确认存在性:
把列中的所有唯一值打印出来,确保'blahMEB'确实在其中,没有拼写错误(比如多了下划线、少了字母等):print(df['blah_id'].unique())
内容的提问来源于stack exchange,提问作者user3476463
相关产品推荐
相关产品推荐

