Python pandas dropna()を使用してDataFrameからNA値を削除する方法

はじめに

このチュートリアルでは、pandasのDataFrame dropna() 関数の使い方を学びます。

NA 値は「利用不可」を意味します。これは NullNonepandas.NaT、または numpy.nan に該当します。dropna() を使用すると、これらの値を持つ行や列が削除されます。これにより、有効なデータのみが提供されるようになります。

デフォルトでは、この関数は新しいDataFrameを返し、ソースDataFrameは変更されません。

このチュートリアルは Python 3.10.9、pandas 1.5.2、NumPy 1.24.1 で検証されました。

構文

dropna() は以下のパラメータを取ります:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: {0(または 'index')、1(または 'columns')}、デフォルトは 0
  • 0 の場合、欠損値を持つ行を削除します。
  • 1 の場合、欠損値を持つ列を削除します。
  • how: {'any'、'all'}、デフォルトは 'any'
  • 'any' の場合、値のいずれかが NA の場合、行または列を削除します。
  • 'all' の場合、すべての値が NA の場合、行または列を削除します。
  • thresh:(オプション)ドロップ操作の閾値を指定するint値。
  • subset:(オプション)行または列を指定する列ラベルまたはラベルのシーケンス。
  • inplace:(オプション)bool値。
  • Trueの場合、元のDataFrameが変更され、Noneが返されます。

サンプルDataFrameの構築

有効な値と無効な値を含むサンプルDataFrameを構築します:

dropnaExample.py
import pandas as pd
import numpy as np

d1 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish'],
'ID': [1, 2, 3, 4],
'Population': [100, 200, np.nan, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT]
}

df1 = pd.DataFrame(d1)
print(df1)

このコードはDataFrameを出力します:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT

次に、NA値を持つ追加の行と列を持つ2番目のDataFrameを追加します:

d2 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish', pd.NaT],
'ID': [1, 2, 3, 4, pd.NaT],
'Population': [100, 200, np.nan, pd.NaT, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT, pd.NaT],
'Endangered': [pd.NaT, pd.NaT, pd.NaT, pd.NaT, pd.NaT]
}

df2 = pd.DataFrame(d2)
print(df2)

これにより、新しいDataFrameが出力されます:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT 4 NaT NaT NaT NaT NaT

以下の例で前述のDataFrameを使用します。

欠損値を持つすべての行を削除する

dropna()を使用して、NoneNaN、またはNaT値を含む行を削除します:

dropnaExample.py
dfresult = df1.dropna()
print(dfresult)

これにより、次の出力が生成されます:

Output
Name ID Population Regions 0 Shark 1 100 1

A new DataFrame with a single row that didn’t contain any NA values.

欠損値を持つすべての列を削除する

axis=1を使用してdropna()を使用し、NoneNaN、またはNaT値を持つ列を削除します:

dfresult = df1.dropna(axis=1)
print(dfresult)

任意のNoneNaN、またはNaT値を含む列が削除されます:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4

A new DataFrame with a single column that contained non-NA values.

すべての値がNullの場合、行または列を削除するhow

2番目のDataFrameとhowを使用します:

dropnaExample.py
dfresult = df2.dropna(how='all')
print(dfresult)

NAと等しいall値を持つ行が削除されます:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT

5行目が削除されました。

次に、howを使用してaxisを指定します:

dropnaExample.py
dfresult = df2.dropna(how='all', axis=1)
print(dfresult)

NAと等しいall値を持つ列が削除されます:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT 4 NaT NaT NaT NaT

5列目が削除されました。

しきい値がクロスされた場合に行または列を削除する

dropnaExample.py
dfresult = df2.dropna(thresh=3)
print(dfresult)

threshを使用して、少なくとも3つの非NA値のしきい値を満たさない行を削除します:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

3つの非NA値が少なくとも含まれていない行が削除されます:

特定のサブセットのために行または列を削除する

subsetを使用して、Population列にNA値が含まれる行を削除するために、2番目のDataFrameを使用します:

dropnaExample.py
dfresult = df2.dropna(subset=['Population'])
print(dfresult)

PopulationNA値が含まれる行が削除されます:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

データフレームから列を削除するときに、subset内のindex値も指定できます:

dropnaExample.py
dfresult = df2.dropna(subset=[1, 2], axis=1)
print(dfresult)

1および2のサブセット内のNA値を含む列が削除されます:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4 4 NaT NaT

3番目、4番目、および5番目の列が削除されました。

行または列をinplaceで削除した後のソースDataFrameの変更

デフォルトでは、dropna()はソースDataFrameを変更しません。ただし、大きなソースDataFrameで作業する際にメモリを節約したい場合は、inplaceを使用することがあります。

dropnaExample.py
df1.dropna(inplace=True)
print(df1)

このコードはdfresult変数を使用しません。

これにより、次のように出力されます:

Output
Name ID Population Regions 0 Shark 1 100 1

元のDataFrameが変更されました。

結論

この記事では、NA値を持つ行や列を削除するためにdropna()関数を使用しました。

Pythonとpandasのさらなるチュートリアルで学習を続けてください – Python pandasモジュールチュートリアルpandas重複行の削除

参照

Source:
https://www.digitalocean.com/community/tutorials/pandas-dropna-drop-null-na-values-from-dataframe