【Python】欠損値NaNが含まれる行を抽出する方法

Python

使うデータ

df = pd.DataFrame(
    data={'col_1': [10, 20, 30, np.nan],
          'col_2': [50, 60, 20, 80],
          'col_3': ['a', np.nan, 'c', 'd']}
)
print(df)
   col_1  col_2 col_3
0   10.0     50     a
1   20.0     60   NaN
2   30.0     20     c
3    NaN     80     d

判定方法

isnull()でNaNの判定ができる。

df.isnull()
   col_1  col_2  col_3
0  False  False  False
1  False  False   True
2  False  False  False
3   True  False  False

NaNを含む列(行)を特定する

any()を使う。

df.isnull().any()
col_1     True
col_2    False
col_3     True
dtype: bool

行方向に適用したいときはaxis=1。こっちの方が出番多いかも。

df.isnull().any(axis=1)
0    False
1     True
2    False
3     True
dtype: bool

NaNを含む列(行)を抽出する

df.loc[:, df.isnull().any()]
   col_1 col_3
0   10.0     a
1   20.0   NaN
2   30.0     c
3    NaN     d

行方向に適用したいとき。

df.loc[df.isnull().any(axis=1), :]
   col_1  col_2 col_3
1   20.0     60   NaN
3    NaN     80     d

ちゃんとやるなら。

コメント