はじめに
データ分析をしていると欠損のあるデータに出会います。欠損値を埋める方法はいくつかありますが、ここでは簡単なものを列挙します。
参考
手順
下記の欠損があるデータを使用します。
import numpy as np
from numpy import nan as NA
import pandas as pd
np.random.seed(0)
df = pd.DataFrame(np.random.rand(5,4), columns=['A','B','C','D'])
# わざと欠損にする
df.loc[1,'A'] = NA
df.loc[2:4:2,'B'] = NA
df.loc[1:2,'D'] = NA
リストワイズ削除
欠損を埋めるのではなく、欠損がある行は分析に使用しないという考えです。欠損のある行をすべて削除します。
df.dropna()
ペアワイズ法
欠損のある行をすべて削除してしまうとデータが少なすぎるので、欠損の少ない列を使用することにし、特定の行を取り出してから欠損を削除します。
df[['A','C']].dropna()
決められた値で一律に埋める
とりあえずの処理として一律で埋めることはありえます。値は平均値や中央値にすることが多いです。
df.fillna(0)
前の行の値で埋める
時系列データでは、データの種類によっては計測間隔が異なることがあります。例えば気象データでは、観測地点によっては降水量は毎時、雲量は3時間ごと、などです。欠損している部分の真の値はわからないので、前回計測時点の値で補完するということは十分にあり得ます。
df.fillna(method="ffill")
線形補間・スプライン補間
method
で補間方法を、limit_direction
とlimit_area
で補間する範囲を指定します。
limit_area
は0.23以降の機能なので、google colabを使用している場合はバージョンに注意が必要です。
df.interpolate(method='linear', limit_direction='forward', limit_area='inside')