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)命令时,它可以工作,它不打印任何内容,但我需要元素是floatTL;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
的首选测试