使用 float('nan') 表示缺失值 - 安全么?
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表示未设置的值,这样做好吗?