pandas DataFrame 内の外れ値を検出して除外する 質問する

pandas DataFrame 内の外れ値を検出して除外する 質問する

列がいくつかあるパンダデータフレームがあります。特定の列の値に基づいて、特定の行が外れ値であることがわかりました。たとえば、列のVolすべての値が 12xx 付近にあり、1 つの値が 4000 (外れ値) です。このような列を持つ行を除外したいと思いますVol

したがって、基本的には、特定の列の値が平均から 3 標準偏差以内にあるすべての行を選択するように、データ フレームにフィルターを適用する必要があります。

これを実現するためのエレガントな方法は何でしょうか?

ベストアンサー1

使用scipy.stats.zscore

少なくとも1つの列に外れ値がある行をすべて削除します

データフレームに複数の列があり、少なくとも 1 つの列に外れ値があるすべての行を削除する場合は、次の式を使用すると 1 回でそれが実行されます。

import pandas as pd
import numpy as np
from scipy import stats

df = pd.DataFrame(np.random.randn(100, 3))

df[(np.abs(stats.zscore(df)) < 3).all(axis=1)]

説明:

  • 各列について、まず列の平均と標準偏差を基準にして、列内の各値の Z スコアを計算します。
  • 次に、方向は関係なく、しきい値を下回る場合にのみ絶対 Z スコアを取得します。
  • ( < 3).all(axis=1)各行のすべての列の値が平均から3標準偏差以内であるかどうかを確認します。
  • 最後に、この条件の結果を使用してデータフレームのインデックスが作成されます。

1つの列に基づいて他の列をフィルタリングする

上記と同じですが、 の列zscore(df[0]例) を指定し、 を削除します.all(axis=1)

df[np.abs(stats.zscore(df[0])) < 3]

おすすめ記事