dataframe.apply(lambda x: x is np.nan) 不起作用

Bo *_*Wan 1 python numpy pandas

所以基本上数据框中的列有 Nan 和 float,我想使用 apply 来计算列中的值。如果值为nan,则返回else,计算。

但看起来x is np.nanlambda 并没有给我正确的答案。这是一个例子

In[6]: df = pd.DataFrame({'A': [np.nan, np.nan, np.nan]})

In[7]: df.A.apply(lambda x: x is np.nan)
Out[7]: 
0    False
1    False
2    False
Run Code Online (Sandbox Code Playgroud)

有谁知道原因吗?

piR*_*red 5

首先要事。为了得到你想要的:

df.A.isnull()
Run Code Online (Sandbox Code Playgroud)

其次,np.nan没有可比性。设计上np.nan == np.nan是错误的。

为了解决这个问题,pandas 和 numpy 有特定的函数来测试它是否为空。你可以:

df.A.apply(pd.isnull)
Run Code Online (Sandbox Code Playgroud)

但这与以下内容是一样的:

df.A.isnull()
Run Code Online (Sandbox Code Playgroud)

就是我上面提到的。