我有两个列表
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。提前谢谢。
答案 0 :(得分:9)
如果你没有把它放在引号中,nan
就是一个数字(它是一个特殊数字,用于表示不存在的结果,称为"不是数字") 。它如此特别,以至于它自身并不均衡。使用math.isnan
或numpy.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值的nan
为repr
,Python也没有定义内置常量nan
。 (对比True
,False
,None
等)3.5及更高版本math.nan
,但在此之前您必须说float('nan')
。