DataFrameの欠損値についての取り扱い方法 その1 とりあえず消してみよう
分析したいデータには大体が欠損値がつきものだと思います。
というわけで、まずは欠損値についてまとめてみましょう。
欠損値の取り扱いは以下の2種類かと思います。
- 削除
- 穴埋め(置き換えですね)
今回は削除についてまとめていきたいと思います。
消してしまおう!(削除)
データによっては消してしまったほうがいいものもある(かもしれません)
というこで、まずは消してしまう方法から考えていきましょう。
削除方法として
- 該当するデータを1つずつ確認して削除する方法
- 一括で変換(dropna)をする方法
の2種類があります。
テストデータを作ってみます。
name | age | add | English | math | |
---|---|---|---|---|---|
0 | aaa | Nan | Tokyo | 80 | 90 |
1 | bbb | 20 | Osaka | 85 | 80 |
2 | ccc | 22 | Nagoya | 90 | 85 |
aaaさんの年齢を欠損させておきます。
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)
- dropna()を使ってデータを一括で消去してしまおう。
df_after = df.dropna()
print(df_after)
df_afterの結果:
name | age | add | English | math | |
---|---|---|---|---|---|
1 | bbb | 20 | Osaka | 85 | 80 |
2 | ccc | 22 | Nagoya | 90 | 85 |
aaaさんのデータが全消去されました。
今回は1つのデータのみ欠損値があっただけなので、次は複数あった場合を確認してみましょう。
data2 = {"name":["aaa","bbb","ccc",np.nan,"EEE"],"age":[np.nan,20,22,20,18],"add":["Tokyo","Osaka","Nagoya",np.nan,np.nan],"English":[80,85,90,100,90],"math":[90,80,85,80,90]} df2 = pd.DataFrame(data2)
df2の結果:
name | age | add | English | math | |
---|---|---|---|---|---|
0 | aaa | Nan | Tokyo | 80 | 90 |
1 | bbb | 20 | Osaka | 85 | 80 |
2 | ccc | 22 | Nagoya | 90 | 85 |
3 | NaN | 20.0 | NaN | 100 | 80 |
4 | EEE | 18.0 | NaN | 90 | 90 |
これをdropna()を使って削除してみましょう。
df2_after = df2.dropna()
df2_afterの結果:
name | age | add | English | math | |
---|---|---|---|---|---|
1 | bbb | 20 | Osaka | 85 | 80 |
2 | ccc | 22 | Nagoya | 90 | 85 |
この結果からわかるように、1つでもNanデータがあるとデータは削除されることがわかります。
<最終更新日:2021/09/27>
2021/09/27:タイトルの一部と画像を修正。
2021/09/24:タイトル一部修正。画像追加。
2021/09/21 投稿