使用 float('nan') 表示缺失值 - 安全么?

3 投票
1 回答
2771 浏览
提问于 2025-04-16 06:17

Python 3.1

我在处理一些数据,这些数据里有缺失值。任何涉及缺失值的计算都应该得到一个缺失值的结果。

我在考虑用 float('nan') 来表示这些缺失值,这样做安全吗?最后我会检查一下

def is_missing(x):
  return x!=x # I hope it's safe to use to check for NaN

这个方法看起来不错,但我在文档里找不到明确的确认。

当然,我可以用 None 来表示缺失值,但这样的话我每次计算都得用 try / except TypeError 来处理它。我也可以用 Inf,但我对这个的工作原理更不确定。

编辑:

@MSN 我知道使用 NaN 的速度比较慢。但如果我的选择是:

# missing value represented by NaN
def f(a, b, c):
  return a + b * c

或者

# missing value represented by None
def f(a, b, c):
  if a is None or b is None or c is None:
    return None
  else:
    return a + b * c

我想 NaN 这个选项应该还是更快的,对吧?

1 个回答

1

这其实是比较安全的,但如果浮点运算单元(FPU)需要处理x的话,速度可能会变得非常慢(因为有些硬件把NaN当作特殊情况来处理):使用IEEE754浮点数的NaN表示未设置的值,这样做好吗?

撰写回答