Pandas DataFrame Isnull 一次多列

Pandas DataFrame Isnull Multiple Columns at Once

鉴于以下情况:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[np.nan,1,2],'b':[np.nan,np.nan,4]})

     a    b
0  NaN  NaN
1  1.0  NaN
2  2.0  4.0

如何 return 列 'a' 和 'b' 都为空的行,而不必为每一列使用 pd.isnull

想要的结果:

     a    b
0  NaN  NaN

我知道这行得通(但这不是我想要的):

df.loc[(pd.isnull(df['a']) & (pd.isnull(df['b'])]

我试过这个:

df.loc[pd.isnull(df[['a', 'b']])]

...但出现以下错误:

ValueError: Cannot index with multidimensional key

提前致谢!

你很接近:

df[~pd.isnull(df[['a', 'b']]).all(1)]

或者

df[df[['a','b']].isna().all(1)]

怎么样:

df.dropna(subset=['a','b'], how='all')

您可以使用 dropna() 参数为 how=all

df.dropna(how='all')

输出:

   a    b
1  1.0  NaN
2  2.0  4.0

由于问题已更新,您可以使用 df.isnull() 或使用 df.isna() 创建屏蔽并相应地进行过滤。

df[df.isna().all(axis=1)]
   a   b
0 NaN NaN

使用您展示的示例,请尝试执行以下操作。在此处使用 isnull 函数。

mask1 = df['a'].isnull()
mask2 = df['b'].isnull()
df[mask1 & mask2]


以上答案是创建 2 个变量以便更好地理解。如果您想在 df 本身内部使用条件并且不想创建条件变量(在这种情况下为 mask1mask2),请尝试以下操作。

df[df['a'].isnull() & df['b'].isnull()]

输出如下。

    a   b
0   NaN NaN