LoginSignup
2
0

More than 3 years have passed since last update.

【Python】欠損率(欠測率)一定割合以上の列を削除(Pandas)

Last updated at Posted at 2020-12-18

背景

特徴量に欠損値(NaNとか)がある場合、平均や0で埋めたりする。しかし、欠損値の割合が増すにつれて平均や0で埋める割合が増えるわけだけど、それは同時に「その特徴量の大部分が同じ値なる」ことがある。パッと思いつく問題点は以下。

  • 全て欠損値の場合、全てが同じ値で埋められて、分散が0に。(標準化ができない。)
  • 全てが欠損値じゃない場合でも、交差検証で分割次第で値が全て同じに。

一定割合以上の欠損値を含む特徴量をモデルから削除

ということで、手っ取り早く一定の割合以上の欠損値を含む特徴量を削除してしまうことで、上記の問題を避けてしまうことにする。データはpd.DataFrameで与えられるとして手順は以下。

  1. 各列の欠損値の合計を示す配列を取得
  2. 1.をデータ数で割って割合にする
  3. 一定の割合(rate)よりも欠損値を含む列番号をリストに追加していく
  4. 3.のリストをpd.DataFrame.drop()に入れてまとめて削除
main_in
import pandas as pd

def drop_manyNuNcolumns(df,rate):
    NaN_sum = df.isnull().sum() # 1.
    rate_NaN = NaN_sum / df.shape[0] # 2.
    drop_list = list() # 3.
    for i in range(rate_NaN.shape[0]-1):
        if rate_NaN[i] > rate:
            drop_list.append(i)
        else:
            pass
    return df.drop(data.columns[drop_list],  axis=1) # 4.
2
0
0

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
2
0