らふのプログラミングメモ

プログラミングメモです。

DataFrameの欠損値についての取り扱い方法 その2 選んで消してみよう

先日のつづきをやっていきましょう。 

rafu.hatenablog.jp

タイトルコール:DataFrameの欠損値について その2
Pandasの欠損値について その2 スタート!

先日と同じテストデータを使ってみます。

name age add English math
0 aaa Nan Tokyo 80 90
1 bbb 20 Osaka 85 80
2 ccc 22 Nagoya 90 85
import pandas as pd
import numpy as np

data = {"name":["aaa","bbb","ccc"],"age":[np.nan,20,22],"add":["Tokyo","Osaka","Nagoya"],"English":[80,85,90],"math":[90,80,85]}

df = pd.DataFrame(data)
  • 欠損値(Nan)がないかを確認してみよう
# 欠損値を探してみよう
df.isnull()

isnull()の結果:

name age add English math
0 False True False False False
1 False False False False False
2 False False False False False

isnull()メソッドを実行するとNanのところのみTrueが返ってくるのがわかります。

これよりどの行に欠損値があるかを調べてみましょう。

    # 今回は行ごとのチェックなのでaxis = 1で設定します。
    nnnnn = df.isnull().any(axis=1)
    print(nnnnn)

nnnnnの結果:

0True
1False
2Flase

dtype: bool

これで欠損値がある行にはTrue
欠損値がない行にはFalseが入ります。

これを使って0行目を削除してみましょう。

for i in range(len(df)):
    if nnnnn[i] == True:
        d_df = df.drop(i)

print(d_df)

d_dfの結果:

name age add English math
1 bbb 20 Osaka 85 80
2 ccc 22 Nagoya 90 85

このように、nnnnnがTrueになっている行を削除(drop)すれば、
先日のdropna()と同じ結果を得られるようになりました。

dropna()とisnull()を使って削除するときのメリットデメリットは?

メリット デメリット
dropna() 一括削除ができる
プログラムが楽
処理も早い
残しでもいいものがある時が不便
isnull() 1つ1つ削除するかどうかを設定できる プログラムが面倒
処理に時間がかかる

このように、それぞれの処理にはメリットデメリットがあるので、
データの欠損値の処理を行う際には、
データの特徴にあった処理を選んでプログラミングをしましょう。


<最終更新日:2021/09/27>
絵のタイトルの修正。

2021/09/24 投稿