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如果aNaN

这甚至适用于字符串

例:

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它将返回Truepd.isnull将返回,True因此取决于您是否想将其None视为NaN仍可==用于比较还是pd.isnull将其None视为NaN