30
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

欠損値を処理する方法

Last updated at Posted at 2018-12-03

はじめに

データ分析をしていると欠損のあるデータに出会います。欠損値を埋める方法はいくつかありますが、ここでは簡単なものを列挙します。

参考

手順

下記の欠損があるデータを使用します。

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
スクリーンショット 2020-02-26 22.54.23.png

リストワイズ削除

欠損を埋めるのではなく、欠損がある行は分析に使用しないという考えです。欠損のある行をすべて削除します。

df.dropna()
スクリーンショット 2020-02-26 22.55.14.png

ペアワイズ法

欠損のある行をすべて削除してしまうとデータが少なすぎるので、欠損の少ない列を使用することにし、特定の行を取り出してから欠損を削除します。

df[['A','C']].dropna()
スクリーンショット 2020-02-26 22.55.58.png

決められた値で一律に埋める

とりあえずの処理として一律で埋めることはありえます。値は平均値や中央値にすることが多いです。

df.fillna(0)
スクリーンショット 2020-02-26 22.56.32.png

前の行の値で埋める

時系列データでは、データの種類によっては計測間隔が異なることがあります。例えば気象データでは、観測地点によっては降水量は毎時、雲量は3時間ごと、などです。欠損している部分の真の値はわからないので、前回計測時点の値で補完するということは十分にあり得ます。

df.fillna(method="ffill")
スクリーンショット 2020-02-26 22.57.23.png

線形補間・スプライン補間

methodで補間方法を、limit_directionlimit_areaで補間する範囲を指定します。
limit_areaは0.23以降の機能なので、google colabを使用している場合はバージョンに注意が必要です。

df.interpolate(method='linear', limit_direction='forward', limit_area='inside')
スクリーンショット 2020-02-26 22.58.13.png
30
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?