Python 无法在float类型的Numpy数组中标识None元素

Python 无法在float类型的Numpy数组中标识None元素,python,numpy,if-statement,floating-point,Python,Numpy,If Statement,Floating Point,以下是我所做的尝试: series1 = np.array([1, 3, None, None, 5]).astype(np.float) print(series1) for i in range(series1.shape[0]): if series1[i] == None: print(series1[i]) if series1[i] == 'None': print(i) try: if series1[i] =

以下是我所做的尝试:

series1 = np.array([1, 3, None, None, 5]).astype(np.float)
print(series1)
for i in range(series1.shape[0]):
    if series1[i] == None:
        print(series1[i])
    if series1[i] == 'None':
        print(i)
    try:
        if series1[i] == nan:
            print(series1[i])
    except NameError:
        pass
    if series1[i] == 'nan':
        print(series1[i])
输出

[ 1.  3. nan nan  5.]

我需要if语句来标识Numpy数组中的元素在哪里是None。但是除了上面代码中的内容,我想不出其他任何东西。当我不提供.astype(np.float)命令时,它可以工作,它不打印任何内容,但我需要元素是float

TL;DR使用

import math
...
   if math.isnan(series1[i]):
      ...
nan
是一个特殊的浮点值,表示该数字不是有效值-表示不是数字。它不同于
None
,后者是一个Python对象,不是浮点或数值

创建数组时,Numpy会将
None
转换为
nan
s,这没关系-它们的语义相同。除了从“无”转换之外,某些算术结果还可能导致NaN,例如无穷大除以无穷大,或者在数组操作中,在零除法或其他无效运算中引发异常会中断所有程序流

但是,
nan
s只能以特定的方式检测。比较不是其中之一——它是Python中唯一一个用
==
比较来比较与自身不同的常规对象。(即:
nan==nan
导致
False

然后,您尝试将yur浮点值与
'None'
'nan'
进行比较:以这种方式引用的是文本字符串-组成名称的字符,而不是特殊的Python对象

在常规Python中检查nan的正确方法是使用
math.isnan(value)
(在执行此操作之前,必须
导入math
)。它返回True或False,可以直接在
if
语句中使用


如果您在某个时候正在使用NumPy的向量函数,而不是使用外部Python
for
,则会出现
NumPy.isnan
调用。

我认为您在这里可以找到
x is None
None
的首选测试