You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas中df.loc或循环操作无法识别NaN值问题咨询

核心原因

NaN 遵循IEEE 754浮点标准的特殊定义:NaN和任何值做等值比较都会返回False,包括它自身。
你可以直接执行验证代码:

import numpy as np
print(np.nan == np.nan)  # 输出False

这就是df.loc[df.Outliers == np.nan]返回0行的根本原因,和这些NaN值是不是numpy.float64类型没有任何关系。不管是loc条件筛选还是普通for循环里的判断,只要用==和NaN做等值匹配,永远拿不到正确结果。
你之前调用value_counts(dropna=False)能统计到2862个NaN,是因为pandas内部对缺失值做了专门的统计逻辑,并没有走等值判断的流程。

正确筛选NaN行的方案

推荐按优先级选以下写法:

  • 优先用pandas原生缺失值判断方法,兼容性最好,能识别所有pandas支持的缺失值类型(包括np.nan、None、pd.NA等):
# 筛选Outliers列为NaN的行
df.loc[df['Outliers'].isna()]

# 旧版pandas等价写法,和isna()逻辑完全一致
df.loc[df['Outliers'].isnull()]
  • 如果你确定列里只有numpy浮点型NaN,也可以用numpy的判断函数:
df.loc[np.isnan(df['Outliers'])]
  • 如果需要筛选非NaN的行,直接对判断结果取反即可:
df.loc[~df['Outliers'].isna()]

补充:不要尝试自己写等值逻辑判断NaN,所有判断NaN的标准实现,本质都是利用了「NaN不等于自身」的特性,专门做了逻辑适配。

内容的提问来源于stack exchange,提问作者shrey_shankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:00:11