DataFrameの欠損値についての取り扱い方法 その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の結果:
0 | True |
1 | False |
2 | Flase |
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 投稿