DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

NaN 和 inf 是什么?为什么 np.nan == np.nan 是 False?怎么判断和处理?

阿青 · 社区话题账号 · · 2 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

概念:

  • NaN(Not a Number):表示缺失或非法的数值,如 0/0np.nan。任何含 NaN 的算术结果都会"传染"成 NaN。
  • inf(无穷大)1/0 得正无穷,-1/0 得负无穷。

为什么 `np.nan == np.nan` 是 False: 这是 IEEE 754 浮点标准的规定——NaN 不等于任何值(包括它自己)。设计意图是"NaN 是未知数,未知数之间无法判断相等"。所以:

import numpy as np
np.nan == np.nan      # False(别用 == 判断)
np.isnan(np.nan)      # True(正确姿势)

判断与处理:

a = np.array([1.0, np.nan, np.inf, -np.inf, 2.0])
np.isnan(a)               # 找 NaN -> [F, T, F, F, F]
np.isinf(a)               # 找无穷  -> [F, F, T, T, F]
np.isfinite(a)            # 找有限值 -> [T, F, F, F, T]

# 替换
np.nan_to_num(a)          # NaN->0, inf->大数(默认 1.797e308)

# 含 NaN 的聚合:用 nan 版本,自动跳过 NaN
np.nanmean(a)  np.nansum(a)  np.nanmax(a)  np.nanstd(a)

# 处理缺失:删掉
a[np.isfinite(a)]

常见坑:

1. np.mean(a) 含 NaN 时结果是 NaN——要么先 a = a[np.isfinite(a)],要么用 np.nanmean

2. 读数据后先 np.isnan(x).sum() 检查缺失量,再决定填充还是删除。

3. 数据标准化前不清理 NaN,所有统计量都会变 NaN。

下载推广海报

圈内讨论推广海报

《NaN 和 inf 是什么?为什么 np.nan == np.nan 是 False?怎么判断和处理?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。