ノンプログラマーのためのPython学習サイト

Pandas|欠損値の削除・穴埋め方法

eye_catch_Pandas

困っている人

  • Pandasで欠損値を削除する方法を知りたい
  • また、欠損値を穴埋めする方法も知りたい
  • 欠損値の削除・穴埋めの具体的な操作を教えてほしい
この記事で解決できること
  1. Pandasで欠損値を削除する方法(dropna)が分かる
  2. 欠損値を穴埋めする方法(fillna)が分かる
  3. 欠損値の削除・穴埋めの具体的な操作が分かる

この記事を書いている人

プログラミング(Python・Django・SQL・HTML・css・Bootstrapなど)を独学で習得。「Excel作業の自動化」「人工知能による予測」「Webアプリ開発」「Webスクレイピング」で業務改善×システム化を得意にしています。

Pythonによる欠損値の削除・穴埋め

「欠損値の削除」と「欠損値の穴埋め」は、データ分析の前処理によく使われるテクニックです。

データ分析の現場では、全ての情報が完璧に揃っていることは稀で、データが一部欠損している場合があります。その際は、欠損値に適切な処理が必要です。

No. 商品名 単価 内容
1 りんご 150 両方ともデータがある
2 みかん NaN 一方だけデータがある
3 NaN NaN 両方ともデータがない

今回は、Pandasのデータフレームにおける、「欠損値の削除」「欠損値の穴埋め」を解説していきます。データ分析の前処理に欠かせないテクニックなので、ぜひ参考にしてください。

Pythonによる欠損値の削除・穴埋め方法

今回紹介する欠損値の削除と穴埋め方法の一覧です。No.1〜No.7までを順に説明していきます。

No. 基本形 説明
1 dropna(how=”all”) 欠損値(全ての行)の削除
2 dropna(how=”any”) 欠損値(どれか一つ)の削除
3 fillna(300).astype(int) 欠損値を数値(300)で穴埋め
fillna(method = ‘ffill’).astype(int) 欠損値を一つ前の数値で穴埋め
fillna(df.mean()).astype(int) 欠損値を平均値(数値)で穴埋め
fillna(df.median()).astype(int) 欠損値を中央値(数値)で穴埋め

Pythonによる欠損値の削除・穴埋め方法のサンプルデータ

この記事では以下のサンプルデータを使います。よろしければ、ダウンロードしてご利用ください。

[st-mybox title=”” fontawesome=”” color=”#757575″ bordercolor=”#7ca1b7″ bgcolor=”#ffffff” borderwidth=”2″ borderradius=”2″ titleweight=”bold” fontsize=”” myclass=”st-mybox-class” margin=”25px 0 25px 0″]

[/st-mybox]

また、GoogleColabへのサンプルデータ(Excelファイル)の読み込み方法については、以下の記事を参考にしてください。

[st-card id=180 label=”” name=”” bgcolor=”” color=”” fontawesome=”” readmore=”on”]

欠損値を削除する方法(dropnaメソッド)

それでは、欠損値を削除する方法から説明していきます。まずはExcelファイルを読み込んでください。

Excelファイル(data_1)の読み込み

Pandasを使ってExcelファイルを読み込みます。「単価」の列を見ると、いくつか空白(NaN)があることが分かります。特に、7行目と8行目は「商品名」も「単価」も空白になっていることを覚えておいてください。

import pandas as pd
df_1=pd.read_excel('/content/item_price.xlsx')
df_1

1.pandasをインポート
2.変数(df_1)にExcelファイルから読み込んだデータフレームを代入
3.変数(df_1)を出力

欠損値の削除「dropna(how=”all”)」

まず、「商品名」と「単価」が両方とも欠損している、7行目と8行目のデータを削除します。「how=”all”」を使うことで、全ての行で欠損しているデータを削除できます。

df_1.dropna(how="all")
df_1

1.変数(df_1)に、欠損しているデータ(全て)を削除したデータフレーム を代入
2.変数(df_1)を出力

欠損値の削除「dropna(how=”any”)」

次に、「商品名」と「単価」のどちらかが欠損しているデータを削除します。下記のとおり、2行目と4行目のデータが削除されています。「how=”any”」を使うと、どれか一つでも欠損していればデータを削除します。

df_2=df_1.dropna(how="any")
df_2

1.変数(df_2)に、欠損しているデータ(どれか一つ)を削除したデータフレーム を代入
2.変数(df_2)を出力

Pythonで欠損値を穴埋めする方法(fillnaメソッド)

欠損値の穴埋めには以下の方法があります。中でも、よく使われる方法について具体的に説明していきます。

[st-mybox title=”” fontawesome=”” color=”#757575″ bordercolor=”#7ca1b7″ bgcolor=”#ffffff” borderwidth=”2″ borderradius=”2″ titleweight=”bold” fontsize=”” myclass=”st-mybox-class” margin=”25px 0 25px 0″]

任意の値を指定して穴埋め

・列データの前後の値を指定して穴埋め

・列データの平均値、中央値、最頻値で穴埋め

[/st-mybox]

欠損値を”任意の値”で指定して穴埋め

「単価」の列データの欠損値を、任意の値(300)を指定して穴埋めします。「単価_1」に穴埋め後のデータが表示されています。

df_1['単価_1']=df_1['単価'].fillna(300).astype(int)
df_1

1.変数(df_1[‘単価_1’])に、欠損値を300(数値)に穴埋めしたデータを代入
2.変数(df_1)を出力

欠損値を列データの”前の値”で指定して穴埋め

「単価」の列データの欠損値を、一つ前の値を指定して穴埋めします。「単価_1」に穴埋め後のデータが表示されています。

df_1['単価_1']=df_1['単価'].fillna(method = 'ffill').astype(int)
df_1

1.変数(df_1[‘単価_1’])に、一つ前のデータで穴埋めしたデータを代入
2.変数(df_1)を出力

欠損値を列データの”平均値”で穴埋め

「単価」の列データの平均値で穴埋めします。「単価_平均」に穴埋め後のデータが表示されています。

df_1['単価_平均']=df_1['単価'].fillna(df_1['単価'].mean()).astype(int)
df_1

1.変数(df_1[‘単価_平均’])に、欠損値を単価の列データの平均で穴埋めしたデータを代入
2.変数(df_1)を出力

欠損値を列データの”中央値”で穴埋め

「単価」の列データの中央値で穴埋めします。「単価_中央値」に穴埋め後のデータが表示されています。

df_1['単価_中央値']=df_1['単価'].fillna(df_1['単価'].median()).astype(int)
df_1

1.変数(df_1[‘単価_平均’])に、欠損値を単価の列データの平均で穴埋めしたデータを代入
2.変数(df_1)を出力

Pythonによる欠損値の削除と穴埋め方法まとめ

Pythonによる「欠損値の削除」と「欠損値の穴埋め」について解説しました。

もし、使用するデータに欠損値がある場合は、適切な処理を行う必要があります。欠損値をそのままにして分析してしまうと、間違った結果を出す可能性があるからです。

今回ご紹介した「dropnaメソッド」「fillnaメソッド」は、欠損値を一括で処理できる便利なメソッドなので、参考にしてください。

最後まで読んでいただき、ありがとうございます。