Python中nan和'nan'之间的区别

时间:2016-10-28 16:56:33

标签: python numpy nan

我有两个列表

a = ['E300' 'E407' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' ]
b = [ nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan]

我想从列表中删除nan。所以我在列表'a'和'b'

上使用了它
a = [x for x in a if x != 'nan']
b = [x for x in b if x != 'nan']

所以它适用于列表'a',因为我认为它将'nan'作为字符串而不是列表b。如何从列表b中删除那些nan。提前谢谢。

3 个答案:

答案 0 :(得分:9)

如果你没有把它放在引号中,nan就是一个数字(它是一个特殊数字,用于表示不存在的结果,称为"不是数字") 。它如此特别,以至于它自身并不均衡。使用math.isnannumpy.isnan来测试某个数字是否为nan

b = [x for x in b if not math.isnan(x)]

答案 1 :(得分:1)

'nan'是一个字符串

nan不是数字,您可以通过方法math.isnan()

进行检查
>>> nan=float('nan')
>>> math.isnan(nan)
True

在你的情况下:

b = [x for x in b if not math.isnan(x)]

答案 2 :(得分:1)

'nan'是一个字符串,但nan是一个浮点数。这很有趣,因为" nan"代表Not A Number,但它确实是这样的:

>>> type(nan)
<class 'float'>

nan有许多棘手的属性,其中最棘手的是它将所有包括其自身的不等等。您必须使用特殊功能来检查它,math.isnan

>>> b
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]
>>> [x for x in b if x != nan]
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]
>>> [x for x in b if not math.isnan(x)]
[]

注意:即使NaN值的nanrepr,Python也没有定义内置常量nan。 (对比TrueFalseNone等)3.5及更高版本math.nan,但在此之前您必须说float('nan')