Numpy / Pandas清除方式来检查特定值是否为NaN

时间:2018-05-22 13:05:39

标签: python pandas numpy

如何检查给定值是否为NaN?

e.g。 if (a == np.NaN)(不起作用)

在你投票之前,请注意:

  • Numpy的isnan方法会抛出数据类型(如string
  • )的错误
  • Pandas docs仅提供删除包含NaN的行的方法,或者检查DataFrame是否包含NaN的方法。我问的是检查特定值是否为NaN。
  • 相关的Stackoverflow问题和Google搜索结果似乎是关于检查“如果任何值是NaN”或“DataFrame中的值”

必须有一种干净的方法来检查给定值是否为NaN?

2 个答案:

答案 0 :(得分:8)

Pandas有notnullisnanotnahttps://appleid.apple.com/

这些函数适用于数组或标量。

设置

a = np.array([[1, np.nan],
              [None, '2']])

Pandas功能

pd.isna(a)
# same as
# pd.isnull(a)

array([[False,  True],
       [ True, False]])
pd.notnull(a)
# same as
# pd.notna(a)

array([[ True, False],
       [False,  True]])

DataFrame(或Series)方法

b = pd.DataFrame(a)
b.isnull()
# same as
# b.isna()

       0      1
0  False   True
1   True  False
b.notna()
# same as
# b.notnull()

       0      1
0   True  False
1  False   True

答案 1 :(得分:8)

您可以使用NaN!= NaN

的inate属性

如果a == aFalse,则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