检查熊猫数据框中的 None

Con*_*anG 8 python numpy nan pandas

我想找到在数据框中找到 None 的位置。

pd.DataFrame([None,np.nan]).isnull()
OUT: 
      0
0  True
1  True
Run Code Online (Sandbox Code Playgroud)

isnull() 找到 numpy Nan 和 None 值。

我只想要 None 值而不是 numpy Nan。有没有更简单的方法来做到这一点而不循环遍历数据框?

编辑:阅读评论后,我意识到在我的工作中的数据框中还包含字符串,因此 None 没有被强制为 numpy Nan。所以 Pisdom 给出的答案是有效的。

Kei*_*iku 20

如果你想得到每一行的True/False,你可以使用下面的代码。以下是以下 DataFrame 的结果示例:

df = pd.DataFrame([[None, 3], ["", np.nan]])

df
#      0      1
#0  None    3.0
#1          NaN
Run Code Online (Sandbox Code Playgroud)

如何检查None

可用的:.isnull()

>>> df[0].isnull()
0     True
1    False
Name: 0, dtype: bool
Run Code Online (Sandbox Code Playgroud)

可用:.apply ==is None

>>> df[0].apply(lambda x: x == None)
0     True
1    False
Name: 0, dtype: bool

>>> df[0].apply(lambda x: x is None)
0     True
1    False
Name: 0, dtype: bool
Run Code Online (Sandbox Code Playgroud)

可用的:.values == None

>>> df[0].values == None
array([ True, False])
Run Code Online (Sandbox Code Playgroud)

不可用:is==

>>> df[0] is None
False

>>> df[0] == None
0    False
1    False
Name: 0, dtype: bool
Run Code Online (Sandbox Code Playgroud)

不可用:.values is None

>>> df[0].values is None
False
Run Code Online (Sandbox Code Playgroud)

如何检查np.nan

可用的:.isnull()

>>> df[1].isnull()
0    False
1     True
Name: 1, dtype: bool
Run Code Online (Sandbox Code Playgroud)

可用的:np.isnan

>>> np.isnan(df[1])
0    False
1     True
Name: 1, dtype: bool

>>> np.isnan(df[1].values)
array([False,  True])

>>> df[1].apply(lambda x: np.isnan(x))
0    False
1     True
Name: 1, dtype: bool
Run Code Online (Sandbox Code Playgroud)

不可用:is== np.nan

>>> df[1] is np.nan
False

>>> df[1] == np.nan
0    False
1    False
Name: 1, dtype: bool

>>> df[1].values is np.nan
False

>>> df[1].values == np.nan
array([False, False])

>>> df[1].apply(lambda x: x is np.nan)
0    False
1    False
Name: 1, dtype: bool

>>> df[1].apply(lambda x: x == np.nan)
0    False
1    False
Name: 1, dtype: bool
Run Code Online (Sandbox Code Playgroud)


Psi*_*dom 7

你可以使用applymap一个lambda检查一个element is None如下,(构建不同的例子,在你原来的,None将强制使用np.nan,因为数据类型float,您将需要一个object类型列保持None原样,或由@Evert评论,None并且NaN在数字类型列中无法区分):

df = pd.DataFrame([[None, 3], ["", np.nan]])

df
#      0      1
#0  None    3.0
#1          NaN

df.applymap(lambda x: x is None)

#       0       1
#0   True   False
#1  False   False
Run Code Online (Sandbox Code Playgroud)