【Python】DataFrameの欠損値を補完する方法

  • URLをコピーしました!

今回は、データフレームの欠損値を補完する方法を紹介します!

補完とは他の値に置き換えることです。

それではさっそく紹介していきます!

目次

欠損値とは

データの中にある、不足しているデータ、または値のことをいいます。

このような欠損値を含むデータがある場合、

欠損値を削除または別の値に置き換えたりする処理が必要になります。

欠損値が残ったままデータ分析を続けると、品質の悪い分析結果になってしまいます。

今回は、欠損値を補完する(別の値に置き換える)方法を紹介します!

欠損値を削除する方法について知りたい方はこちら

欠損値の補完

欠損値を補完する方法は大きく分けて、2通りあります。

  • 指定した値に補完
  • 前回値に補完

また、これら方法をPandasで実現するには、fillna()を使用します。

fillna()の使い方は以下の通りです。

DataFrame.fillna(value, method, axis, inplace, limit, downcast)
  • value: 欠損値を置き換える値。スカラー値、辞書、シリーズまたはデータフレームを指定可能
  • mathod: 欠損値を置き換える方法。ffill(前方埋め)、bfill(後方埋め)などがあるデフォルトはNone
  • axis: 欠損値の置き換え方向。
    • 0は行(デフォルト)
    • 1は列
  • inplace: データフレームを更新するかしないか
    • Trueは更新する
    • Falseはデータフレームは更新せず、新しいデータフレームを作成する
  • limit: 欠損値を置き換える回数を制限
  • downcast: データ型を最適化する。デフォルトNone

それでは実際にfillna()を使った例を紹介していきます!

欠損値を0で埋める方法

fillna()を使用し、欠損値を0で埋める方法は以下の通りです。

引数は、valueを使います。

ただし、以下のコードはvalueを省略しています。

import pandas as pd

# データフレームの作成
data = {'A': [1, 2, None, 4, 5],
        'B': [None, 2, 3, 4, None],
        'C': [1, 2, 3, None, 5]}
df = pd.DataFrame(data)

# 欠損値を0で埋める
df = df.fillna(0)
# データフレームを出力
df

実行結果

以下の図のように、実行前と後のデータフレームを見比べると、動きがわかりやすいです。

NaN0に補完しています!

欠損値を平均値で埋める方法

続いて、fillna()を使用し、欠損値を列ごとの平均値で埋める方法です。

列ごとの平均値で埋めることデータの一貫性を保持できます。

欠損値を0で埋めると、データの傾向をガクッと変えてしまうこともありますが、

欠損値を平均値で埋めると、データ傾向を大きく変えることはありません。

サンプルコードは以下の通りです。

欠損値を0で埋める方法同様に、引数にはvalueを使用していますが、省略して書いています。

import pandas as pd

# データフレームの作成
data = {'A': [1, 2, None, 4, 5],
        'B': [None, 2, 3, 4, None],
        'C': [1, 2, 3, None, 5]}
df = pd.DataFrame(data)

# 列(column)ごとの平均値を取得
mean_df = df.mean()
# 欠損値を平均値で埋める
df = df.fillna(mean_df)
# データフレームを出力
df

実行結果

実行前と後のデータフレームを見比べみましょう!

列ごとにNaN以外の値の平均値で補完しています!

欠損値を前回値で埋める方法

fillna()を使用し、欠損値を前回値で埋める方法です。

上記で紹介した、欠損値を0や平均値で埋める方法とは引数が異なります。

今回の引数はmethodを使用します。

欠損値を前回値を埋めたいので、methodにはffillを指定します。

import pandas as pd

# データフレームの作成
data = {'A': [1, 2, None, 4, 5],
        'B': [None, 2, 3, 4, None],
        'C': [1, 2, 3, None, 5]}
df = pd.DataFrame(data)

# 欠損値を前回値で埋める
df = df.fillna(method='ffill')
# データフレームを出力
df

実行結果

実行前と後のデータフレームを見比べみましょう!

NaNを前回値を補完しています!

まとめ

今回は、fillna()を使用した欠損値を補完する方法を紹介しました!

欠損値は削除することも可能ですが、今回紹介したように補完することも可能です。

削除してしまうと、データをなかったことにしてしまうので、

データの完全性が失われてしまいます。

そんなときは、今回紹介した欠損値を補完する方法を使ってみてください!

参考

おすすめ教材

米国データサイエンティストがやさしく教えるデータサイエンスのためのPython講座 icon
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次