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
などで削除したデータを埋めましょう。このやり方だと外れ値のデータが別の値に置き換わってしまうので、その点は考慮した上で使いましょう
df.fillna(method='bfill')
楽しい Pandas ライフを。