Pythonの欠損値処理でこんな悩みはありませんか?
「Pandas DataFrameでNaN(欠損値)を補完したい、、しかしやり方がわからない。」
今回は「pandasのfillna( )メソッドで欠損値を補完する方法」について解説します。
また欠損値があるかどうかの確認は、下記記事参照。
今回は下記のように欠損値を含むpandas DataFrame(以下dfとする)を用いて解説します。
df = pd.DataFrame({ 'A': [1, 2, np.nan, 4, np.nan], 'B': [5, np.nan, 7, 8, np.nan], 'C': [9, 10, 11, 12, np.nan] })
pandasのfillna( )メソッドの使い方
pandasのfillna( )メソッドは、pandas DataFrame内のNaN(Not a Number)と表示される欠損値を特定の要素で補完するために使います。
基本的な使用方法は以下の通り。
このコードを実行すると、dfのすべてのNaNが「値」で置き換えられます。
例えば、dfのすべてのNaNを0で置き換えたい場合、下記コードを実行すればOK。
df.fillna(0)
特定の列だけを対象にして欠損値を補完したい場合
pandas fillna( )メソッドを特定の列にのみ適用したい場合は、以下のようにします。
下記のコードでは、指定された列名の全てのNaNが「値」で置き換えられます。
例えば、A列のNaNを3で置き換えたい場合は、下記コードでOK。
A列のNaNが3に変わっていることを確認できるかと思います。
df['A'].fillna(3)
列の平均値で置き換える場合
df[‘列名’].mean()でその列の平均値を算出できます。
dfのA列のNaNを「A列の平均値」で補完する場合は下記コードでOK。
df['A'].fillna(df['A'].mean())
※pandas fillna( )メソッドを使う時の注意点
dfを更新しないと、欠損値の補完がdfに反映されない。
下記のようにdf.fillna(0)を実行してdfを出力しても、NaNのままになってしまう。
欠損値の補完をdfに反映させるためには、「欠損値補完後のdf」をdfとする必要がある。
以下のように「df = df.fillna(0)」とdfを更新することで、df内の全てのNaNが0に置き換わっていて、dfが更新されていることがわかる。
df = df.fillna(0) df
列を補完する場合も同様
下記のように「df[‘A’] = 」とするのを忘れないように!
dfを出力すると、A列の欠損値が平均値で補完されていることを確認できると思います。
df['A'] = df['A'].fillna(df['A'].mean()) df
特に列の平均値で補完することは非常に多いので、完全に理解しておくのが望ましいです❗️
最後に「こんな補完方法もあるよ」という内容を紹介します。
欠損値を前後のデータで補完することもできる
時系列のデータを扱う場合は下記のように前後の値で補完する方法もありです。
時系列のデータはNaNをデータの平均で補完すると、意味がわからなくなるので。。
pandas fillna()メソッドのmethod引数を`ffill`または`bfill`に設定することで、前の値または後ろの値で補完することができます。
df.fillna(method='ffill') # 前の値で補完 df.fillna(method='bfill') # 後ろの値で補完
これは、こういうことができるんだ〜というくらいの認識でOKです。
今回は以上です。
今回の記事では、pandasのfillna( )メソッドの基本的な使い方や、列の平均値で補完する方法、さらには初学者が陥りやすいミスについて解説しました。
pandas fillna( )メソッドはpythonを活用したデータサイエンスでは頻出ですので是非今回の記事でマスターしてください。
また、pandasのメソッドは量が多く、都度調べるのが面倒なので下記記事でまとめてますので、ブックマークして調べる手間を減らしてもらえればと思います。
皆さんのpythonの勉強に少しでもお役に立てれば幸いです!!