Python 如何检查列表中是否存在np.NaN和/或None

Python 如何检查列表中是否存在np.NaN和/或None,python,numpy,Python,Numpy,None被视为假条件。但是当转换为bool时,np.NaN被视为True any([np.nan, np.NaN, None]) #True 我明白,可以使用np.isnan()捕获它。如果我的数据包含np.NaN、None、np.NaN的组合,那么如果存在这些组合,我如何找到它 有没有更简单的方法找到它们中的一个 编辑: 预期产出: func([np.nan, np.NaN, None, 2]) #True func([np.nan, np.NaN, None,'']) #False 您可

None
被视为假条件。但是当转换为
bool
时,
np.NaN
被视为
True

any([np.nan, np.NaN, None])
#True
我明白,可以使用
np.isnan()
捕获它。如果我的数据包含
np.NaN
None
np.NaN
的组合,那么如果存在这些组合,我如何找到它

有没有更简单的方法找到它们中的一个

编辑:

预期产出:

func([np.nan, np.NaN, None, 2])
#True
func([np.nan, np.NaN, None,''])
#False

您可以定义自己的自定义函数来检查数字是否在有效输入集中,例如:

def isvalid(number):
    if number is None or np.isnan(number):
        return False
    else:
        return True

any([isvalid(x) for x in data])

编辑:我知道您可能想检查其中是否有无效的,您可以简单地否定isvalid结果以实现这一点。

另一种方法是将任何nan转换为有效数字,在本例中为
0.0

In[91]:
any([np.nan_to_num(x) for x in [np.nan, np.NaN, None]])

Out[91]: False
NaN
转换为
0.0

In[92]:

[np.nan_to_num(x) for x in [np.nan, np.NaN, None]]
Out[92]: [0.0, 0.0, None]
编辑 这还将处理更新的样本数据:

In[93]:

any([np.nan_to_num(x) for x in [np.nan, np.NaN, None,'']])
Out[93]: False
还有一个窍门:

arr = [np.nan, None, np.nan]

[i == i if i is not None else False  for i in arr]
输出:

[False, False, False]
False
注意:
np.nan==np.nan
返回False

因此,

arr = [np.nan, None, np.nan, '']
any([i == i if i is not None and i != '' else False  for i in arr])
输出:

[False, False, False]
False
以及

输出:

True
时间:

%timeit any([np.nan_to_num(x) for x in arr])
每个回路241µs±22µs(7次运行的平均±标准偏差,每个1000个回路)

每个回路20.5µs±1.95µs(7次运行的平均值±标准偏差,每个100000个回路)

每个回路2.44µs±137 ns(7次运行的平均值±标准偏差,每个100000个回路)


以下方法将None、各种nan和偶数nan视为字符串:

>>将numpy作为np导入
>>>[np.nan,np.nan,None,'nan','nan']]中x的任意([~np.isnan(np.float_uux)))
假的
Pandas有一个
notna
函数,可用于None和各种NaN(但不是作为字符串的NaN)

>>将熊猫作为pd导入
>>>任意([np.nan,np.nan,None,pd.NA,pd.NaT]]中x的[pd.notna(x)])
假的

但这两种方法都不适用于空字符串
'

相关和可能的重复:要知道将
[np.nan,np.nan,None]
识别为False的最佳方法是什么,但对于最后一部分,这是一个重复,您在这里尝试测试什么?如果存在
NaN
None
?您可以使用
np.isin(您的数组[np.NaN,np.NaN,None])
返回布尔值,而不是真/假,例如
不返回(数字为None或np.isnan(数字))
我喜欢使用
NaN\u to\u num
来处理None、空字符串和NaN。谢谢你的帮助。感谢信息有用+1
%timeit any([i == i if i is not None and i != '' else False  for i in arr])