float(nan')表示nan(不是数字)。但我该如何检查呢?


当前回答

使用math.isnan:

>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True

其他回答

我进入这篇文章,因为我在功能方面遇到了一些问题:

math.isnan()

运行此代码时出现问题:

a = "hello"
math.isnan(a)

它引发了异常。我的解决方案是再做一次检查:

def is_nan(x):
    return isinstance(x, float) and math.isnan(x)

math.isnan()

或将数字与自身进行比较。NaN总是!=NaN,否则(例如,如果是数字),比较应成功。

这里有三种方法可以测试变量是否为“NaN”。

import pandas as pd
import numpy as np
import math

# For single variable all three libraries return single boolean
x1 = float("nan")

print(f"It's pd.isna: {pd.isna(x1)}")
print(f"It's np.isnan: {np.isnan(x1)}}")
print(f"It's math.isnan: {math.isnan(x1)}}")

输出

It's pd.isna: True
It's np.isnan: True
It's math.isnan: True

测试NaN的通常方法是查看它是否等于自身:

def isNaN(num):
    return num != num

当python<2.6时

def isNaN(x):
    return str(float(x)).lower() == 'nan'

这适用于Solaris 5.9机箱上的python 2.5.1和Ubuntu 10上的python 2.6.5