Numpy / Pandas干净的方法来检查特定值是否为NaN
问题内容:
如何检查给定值是否为NaN?
例如if (a == np.NaN)
(无效)
下注之前,请注意:
- Numpy的
isnan
方法抛出诸如字符串之类的数据类型错误 - Pandas文档仅提供删除包含NaN的行的方法,或检查DataFrame是否包含NaN的方法。我在问有关检查特定值是否为NaN的问题。
- 相关的Stackoverflow问题和Google搜索结果似乎与检查“是否有NaN值”或“ DataFrame中的哪些值”有关
必须有一种干净的方法来检查给定的值是否为NaN?
问题答案:
您可以使用NaN
!=的inate属性。NaN
所以a == a
将返回False
如果a
是NaN
这甚至适用于字符串
例:
In[52]:
s = pd.Series([1, np.NaN, '', 1.0])
s
Out[52]:
0 1
1 NaN
2
3 1
dtype: object
for val in s:
print(val==val)
True
False
True
True
这可以通过向量化的方式完成:
In[54]:
s==s
Out[54]:
0 True
1 False
2 True
3 True
dtype: bool
但您仍然可以isnull
在整个系列中使用该方法:
In[55]:
s.isnull()
Out[55]:
0 False
1 True
2 False
3 False
dtype: bool
更新
正如@piRSquared所指出的,如果您进行比较,None==None
它将返回True
但pd.isnull
将返回,True
因此取决于您是否想将其None
视为NaN
仍可==
用于比较还是pd.isnull
将其None
视为NaN