Python

Python:欠損値の取り扱い

スポンサーリンク

はじめに

Pandasでは、欠損値NaNがあるデータを扱っても基本的にはエラーとはなりませんが、処理結果がNaNになることが多いです。一部の関数では、NaNを除いて処理をおこない、結果を返してくれるものもありますが、基本的には処理前に欠損値の処理をしておくほうがよいでしょう。今回は、この欠損値の処理について扱います。

欠損値の処理方法

欠損値の処理方法は、大きくわけて以下の2通りとなる。

  • 欠損値のあるレコードデータを削除する
  • 欠損値を埋める(補完する)

以降、それぞれについてみていく。

データの準備

まず、欠損値のあるサンプルデータを作成する。以下のコードで作成できます。

import numpy as np
import pandas as pd

sample_df=pd.DataFrame(np.random.rand(10,4))

# 一部のデータをわざと欠損させます
sample_df.iloc[1,2]=np.nan
sample_df.iloc[1,3]=np.nan
sample_df.iloc[7:,1]=np.nan

sample_df

欠損値の削除

欠損値を削除するのは、簡単でdropna()を使うとよい。欠損のある行をまるごと削除するには、データフレームに対してdropna()を適用するだけでよい。

sample_df.dropna()

dropna()では、defaultでは欠損値のある行を丸ごと削除します。これに対して、 利用可能なデータをできるだけで使うという考え方もあります。欠損の少ない列だけを用いて、対象とした列に欠損がある場合は行ごと削除することもできます。次のように、dropna()にsubsetオプションを設定します。

sample_df.drop(1,axis=1,inplace=True)
sample_df.dropna(subset=[0,2,3])

 

欠損値を埋める

欠損値を埋めるには、fillna()を使います。ここに、補完する定数や平均値、中央値などの集計値を指定することで、欠損を埋めることができます。

# 平均値で欠損値を埋める
sample_df.fillna(sample_df.mean())

このとき平均値は、列ごとに計算されて、各列の欠損値にこの平均値が適用されます。

定数や集計値ではなく前の値で埋める、という場合は、methodオプションで’ffill’を指定します。

sample_df.fillna(method='ffill')
スポンサーリンク

まとめ

今回は欠損値の取り扱いを学びました。基本的に、欠損値は計算前に処理をする、その処理方法は、削除するか、欠損を埋める、の2つでしたね。実データにはほとんどの場合、欠損値があります。確実に処理できるようにしておきましょう。

コメント

タイトルとURLをコピーしました