【Pandas】欠損値nanを平均値や中央値で置き換え[Python]

  • URLをコピーしました!
目次

データ解析支援ライブラリPandas

前回はデータ解析支援ライブラリPandasで欠損値nanの個数を数え、%表示する関数を作成しました。

今回は欠損値nanを平均値や中央値で置き換える方法を解説していきます。

今回もまずは準備から。

データは前回と同じnanを含んだデータを用います。

データの読み込みはこんな感じ。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

df

実行結果

それでは進めていきましょう。

欠損値nanを平均値や中央値で置き換える方法

まずは欠損値nanを置き換える方法を復習しましょう。

欠損値nanを置き換えるには、「.fillna(置き換える値)」でした。

「value_1」のnanを500に置き換えてみましょう。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

df["value_1"] = df["value_1"].fillna(500)

df

実行結果

では次に500ではなく、「value_1」の列にある他の値の平均値で置き換えてみましょう。

平均値を計算する場合は、「データフレーム名.mean()」でした。

今回は「value_1」の平均値だけなので、df[“value_1”].mean()となります。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

df["value_1"] = df["value_1"].fillna(df["value_1"].mean())

df

実行結果

小数点以下6桁まで表示されてしまっていますが、確かにvalue_1の列のnanを平均値で置き換えることができました。

また中央値の場合は「データフレーム名.median()」でした。

ということで中央値の場合はこうなります。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

df["value_1"] = df["value_1"].fillna(df["value_1"].median())

df

実行結果

今度はnanが中央値である「27」に置き換えられました。

各列をその列の平均値、中央値で置き換える方法

では今度は1列だけではなく、全列をそれぞれの列の平均値、中央値で置き換えてみましょう。

この場合、悩むのは「df[“value_1”] = df[“value_1”].fillna(df[“value_1”].mean())」の部分。

ここを列名を一つずつ取りつつ、「”value_1″」の代わりに代入していくことになります。

その際に必要なのは列の名前を取得する方法。

列名を取得する方法は下の記事で解説していますが、「データフレーム名.columns」です。

これをfor文を使い、一つずつ先ほどの「”value_1″」の代わりに代入していきます。

ということでこんな感じ。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

for column_name in df.columns:
    df[column_name] = df[column_name].fillna(df[column_name].mean())

df

実行結果

各列のnanを各列の平均値で置き換えることができました。

もちろん中央値でも可能です。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

for column_name in df.columns:
    df[column_name] = df[column_name].fillna(df[column_name].median())

df

実行結果

このように欠損値nanを置き換えることで少しでも欠損していないデータに近づけることは、データ解析において重要なことになります。

今回は平均値、中央値だけですが、データによっては違う値を使う方がいい場合もありますが、今回の「df[column_name].mean()」のところを変えるだけで、色々な値にすることができると思います。

どういう値にするといいかはデータを見て判断するしかないのですが。

次回は欠損値nanが入っている場合、その行や列を削除する方法を解説します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次