Pythonのデータ解析支援ライブラリPandas 〜その14 欠損値nanを平均値や中央値で置き換え〜

スポンサーリンク

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

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

Pythonのデータ解析支援ライブラリPandas 〜その13 欠損値nanの個数、%を表示する方法と関数化〜
データ解析支援ライブラリPandas前回はデータ解析支援ライブラリPandasで欠損値nanを判定し、カウント、特定の値に置き換える方法を解説しました。今回はデータ解析をする際に最初に確認するnanの個数と何%のデ...

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

今回もまずは準備から。

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

Pythonでファイル数、行数、列数を指定してダミーデータのファイルを生成するプログラムを作ってみた その2:nanをランダムにもつダミーデータ作成プログラム
nanとは?今回は前に作成したダミーデータのファイルを生成するプログラムをアップデートしていきます。アップデートする方向としては「nan」という値をランダムに入れるということです。ここで疑問。「na...

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

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」です。

Pythonのデータ解析支援ライブラリPandas 〜その5 行名、列名の取得と行数、列数、全要素数の取得〜
データ解析支援ライブラリPandas前回はデータ解析支援ライブラリPandasで行も列も指定してデータを取得する方法を解説しました。しかし行や列を指定してデータを取得するにはどんな名前の行、列があるのか、何行、何列...

これを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をコピーしました