LoginSignup
67
60

More than 5 years have passed since last update.

pandasのデータフレームから外れ値を含む行を取り除く

Last updated at Posted at 2018-02-05

データ解析を行う場合、外れ値を含んでいると相関係数などを求めたときにおかしな値が得られてしまうことがあります。今回はこの外れ値を含む行を取り除く関数を、pandasのdataframeを使用して紹介します。

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

四分位範囲を基準に外れ値をNanで埋める関数

outlier_iqr.py
def outlier_iqr(df):

    for i in range(len(df.columns)):

        # 列を抽出する
        col = df.iloc[:,i]

        # 四分位数
        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

    return df

2σを基準に外れ値をNanで埋める関数

outlier_2s.py
def outlier_2s(df):

    for i in range(len(df.columns)):

        # 列を抽出する
        col = df.iloc[:,i]

        # 平均と標準偏差
        average = np.mean(col)
        sd = np.std(col)

        # 外れ値の基準点
        outlier_min = average - (sd) * 2
        outlier_max = average + (sd) * 2

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

    return df

あとはNanを含む行を以下のコードで消してください。

df.dropna(how='any', axis=0)

ちなみに列を消したい場合はaxis=1と指定してください。

まとめ

今回は四分位範囲と2σを基準に外れ値を含む行を削除する方法を紹介させていただきました。
また、外れ値を取り除くのではなく、平均値や中央値などで穴埋めしたいという方もいらっしゃるかと思います。そんな方には以下のサイトが参考になるかと思いますので是非ご参照ください。
pandasで欠損値NaNを除外(削除)・置換(穴埋め)する

67
60
1

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
67
60