Pandas使用loc做多条件筛选时符合条件数据存在却无返回结果问题排查
问题根因
- Pandas 中的缺失值
NaN是特殊的浮点空值,不等于字符串"NaN",你代码中写的df['Type 2'] == "NaN"是匹配列值为字符串"NaN"的行,而非匹配真正的空值,因此无法筛选到符合要求的行。 - 补充特性:
NaN本身满足NaN != NaN的逻辑,即便列中确实是缺失值,用==判断也永远返回False,永远匹配不到结果。
解决方法
直接使用 Pandas 内置的isna()或者isnull()方法判断缺失值即可,修改后的代码如下:
df.loc[(df['HP'] >= 80) & (df['Type 1'] == "Fire") & (df['Type 2'].isna())]
如果你的数据中确实存储的是字符串形式的"NaN",可以先转换为标准空值后再筛选:
import numpy as np # 把字符串"NaN"替换为标准缺失值 df['Type 2'] = df['Type 2'].replace("NaN", np.nan) # 再执行上述筛选代码即可正常返回结果
内容的提问来源于stack exchange,提问作者Or Zemer Tov
相关产品推荐
相关产品推荐

