nan和'之间的差异;楠';用Python
我有两张单子nan和'之间的差异;楠';用Python,python,numpy,nan,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 = ['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。提前感谢。如果不将其置于引号中,
nan
是一个数字(它是一个特殊数字,用于表示不存在的结果,称为“非数字”)。它是如此的特别以至于它甚至不等于它自己。使用math.isnan
或numpy.isnan
测试数字是否为nan
b = [x for x in b if not math.isnan(x)]
>>> nan=float('nan')
>>> math.isnan(nan)
True
“nan”是一个字符串
nan不是一个数字,您可以通过方法math.isnan()
就你而言:
b = [x for x in b if not math.isnan(x)]
'nan'
是一个字符串,但nan
是一个浮点数。这很有趣,因为“nan”代表,但实际上是这样的:
>>> type(nan)
<class 'float'>
注意:Python没有定义内置常量
nan
,即使nan值的repr
是nan
。(对比True
,False
,None
,等等)3.5和更高版本都有,但在此之前你必须说float('nan')
,nan
是一个数字,'nan'
是一个字符串。这与123
和'123'
之间的区别是一样的(别傻了!)这是行不通的。nan不在字符串引号中,所以我认为它不被系统识别。它是抛出错误。你到底得到了什么错误?如果你在IEEE规范中添加nan
具有浮点运算的信号属性,这就是完美的答案…@dawg我不确定这与h的问题有什么关系如何从列表中删除它。+1用于给出此方法。我也是python新手。我想知道既然nan
来自numpy
,为什么numpy
不提供检查nan
的方法,类似于pandas.isnull()
有。有什么想法吗?当使用!
时,你的意思是不是?@Psidom实际上nan
,inf
和-inf
。是浮点值,而不是浮点数。@Goyo数学家会同意你的意见,但编程语言设计师不会。在Python中,浮点数是任何值类型为float
,包含nan
和±inf
。没错,在Python中,float
的所有实例都称为数字。我错误地认为语言规范会产生影响。出于好奇,我查看了IEEE-758-2008(语言应该遵循的标准的最后一次修订……嗯,或多或少)它说,NaN不是浮点数,而是无穷大。
>>> 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)]
[]