Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nan和'之间的差异;楠';用Python_Python_Numpy_Nan - Fatal编程技术网

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)]
[]