Python
機械学習
pandas

Pandas で四分位数を基準に外れ値を NaN で埋める

More than 1 year has passed since last update.

Pandas は便利ですよね。Pandas の DataFrame から四分位範囲の 1.5 倍を超えるデータを外れ値として削除したいと思います。ある列の値を基準に、その行まるごと削除するのではなく、列ごとに外れ値を検出し、それらを NaN で埋めてみます。

参考: 相関分析の時に四分位範囲(IQR)で外れ値を見つける(Python) - 俺、サービス売って家買うんだ

drop_outlier.py
def drop_outlier(df):
  for i, col in df.iteritems():
    #四分位数
    q1 = col.describe()['25%']
    q3 = col.describe()['75%']
    iqr = q3 - q1 #四分位範囲

    #外れ値の基準点
    outlier_min = q1 - (iqr) * 1.5
    outlier_max = q3 + (iqr) * 1.5

    #範囲から外れている値を除く
    col[col < outlier_min] = None
    col[col > outlier_max] = None

データを scikit-learn などの機械学習の関数に入れる場合は fillna などで削除したデータを埋めましょう。このやり方だと外れ値のデータが別の値に置き換わってしまうので、その点は考慮した上で使いましょう :joy:

df.fillna(method='bfill')

楽しい Pandas ライフを。