データ分析において最も一般的な問題の一つが「欠損値」です。
データが完全でない場合、NaN(Not a Number)として表示されるこれらの欠損値をそのままにしておくと、分析結果が歪んだり、予測モデルの精度が低下したりする可能性があります。
そこで重要になるのが、欠損値を適切に補完する技術です。
Pythonのデータ分析ライブラリ「pandas」では、欠損値を簡単に補完できる便利なメソッドがいくつか用意されています。
その中でも、fillna()メソッドは最も基本的で使い勝手の良い方法の一つです。
このメソッドを使うことで、欠損値を指定した値で埋めたり、他の列や行の値を元に補完したりすることができます。
本記事では、pandasのfillna()メソッドの基本的な使い方から、実践的な活用法まで、さまざまなシーンでの使い方を詳しく解説します。
これを読めば、あなたも欠損値の補完が得意になること間違いなしです!
pandas fillnaとは?
pandasの機能の中で、データの欠損値(NaN)を埋めるために使われるのがfillna()メソッドです。
欠損値とは、データセットにおいて値が存在しない部分を指し、NaN(Not a Number)と表現されます。
fillna()はこのNaNを特定の値やルールに基づいて埋めるためのメソッドです。
なぜ欠損値を埋める必要があるのか?
データ分析や機械学習の過程では、データに欠損値が含まれていると問題が発生することがあります。
- 欠損値があると、統計分析や機械学習モデルのトレーニングに影響が出る。
- データ可視化の際に、グラフが正しく描画されないことがある。
- 欠損値が多いと、分析結果が偏りやすくなる。
こういった問題を解決するために、適切な方法で欠損値を補完することが重要です。その方法の一つがfillna()です。
fillna()の基本的な使い方
欠損値を埋める
import pandas as pd
import numpy as np
# サンプルデータの作成
data = {'A': [1, 2, np.nan, 4],
'B': [np.nan, 2, 3, 4],
'C': [1, np.nan, np.nan, 4]}
df = pd.DataFrame(data)
print("欠損値が含まれているデータフレーム:")
print(df)
# 欠損値を0で埋める
df_filled = df.fillna(0)
print("\n0で欠損値を埋めたデータフレーム:")
print(df_filled)
このように、fillna()に0を渡すことで、すべてのNaNが0に置き換わります!
非常にシンプルですが、これは基本的な方法です!
列ごとに異なる値で埋める
import pandas as pd
import numpy as np
# サンプルデータの作成
data = {'A': [1, 2, np.nan, 4],
'B': [np.nan, 2, 3, 4],
'C': [1, np.nan, np.nan, 4]}
df = pd.DataFrame(data)
print("欠損値が含まれているデータフレーム:")
print(df)
# 列ごとに異なる値で埋める
df_filled_col = df.fillna({'A': 0, 'B': 99, 'C': -1})
print("\n列ごとに異なる値で欠損値を埋めたデータフレーム:")
print(df_filled_col)
この方法では、列ごとに異なるルールで欠損値を補完できるため、より柔軟なデータ処理が可能になります!
前後の値を使って埋める(ffill, bfill)
時系列データなどでは、前後の値を使って欠損値を埋めることが効果的です。ffill(前方補完)とbfill(後方補完)というメソッドを使用します。
import pandas as pd
import numpy as np
# サンプルデータの作成
data = {'A': [1, 2, np.nan, 4],
'B': [np.nan, 2, 3, 4],
'C': [1, np.nan, np.nan, 4]}
df = pd.DataFrame(data)
print("欠損値が含まれているデータフレーム:")
print(df)
# 前方補完
df_ffill = df.ffill()
print("\n前方補完を使用したデータフレーム:")
print(df_ffill)
# 後方補完
df_bfill = df.bfill()
print("\n後方補完を使用したデータフレーム:")
print(df_bfill)
前方補完(ffill)は、欠損値を前の行の値で埋め、後方補完(bfill)は次の行の値で埋めます!これは時系列データの補完によく使われます!
統計的手法(平均値・中央値)で埋める
もう少し高度な方法として、平均値や中央値で欠損値を埋めることができます。
import pandas as pd
import numpy as np
# サンプルデータの作成
data = {'A': [1, 2, np.nan, 4],
'B': [np.nan, 2, 3, 4],
'C': [1, np.nan, np.nan, 4]}
df = pd.DataFrame(data)
print("欠損値が含まれているデータフレーム:")
print(df)
# 平均値で欠損値を埋める
df_mean = df.fillna(df.mean())
print("\n平均値で欠損値を埋めたデータフレーム:")
print(df_mean)
平均値や中央値で補完すると、データのバラツキを減らしつつ欠損値を埋めることができます!ただし、統計的な補完はデータの分布や特徴に影響を与えるため、注意が必要です!
まとめ
fillna()は、非常に便利なメソッドですが、適切に使うためにはデータの特性を理解することが重要です。
欠損値を埋める方法にはさまざまな選択肢がありますが、データの分布や分析目的に応じて選択しましょう。
コメント