Pythonの言語は、今ではEXCELでも利用できるようになっています。
EXCELでのPython利用は、基本的にはデータ分析の分野で利用することになるでしょう。
Pythonには、データ分析に役立つ「Pandas」というライブラリがあります。
これまでにも概要をまとめた記事(リンク)がありますが、「データフレーム」という形で「データ」を扱えるのが特徴です。
今回は「Pandas」の中でも、欠損値の処理を行うメソッドについて、まとめようと思います。
欠損値(NaN)であることを判定
以下のメソッドで、データフレームの各要素が欠損値(NaN)であるかどうかを判定します。
結果は、「True(NaN)」もしくは「False(NaNではない値)」で返されます。
コードサンプル:
import pandas as pd
import numpy as np# サンプルデータ
data = {
‘A’: [1, np.nan, 3],
‘B’: [np.nan, 2, np.nan]}df = pd.DataFrame(data)
# NaNのチェック
isnull_df = df.isnull()print(“NaNチェック結果:\n”, isnull_df)
実行結果:
NaNチェック結果:
A B
0 False True
1 True False
2 False True
欠損値(NaN)ではないことを判定
以下のメソッドで、データフレームの各要素が欠損値(NaN)であるかどうかを判定します。
ただし、結果は、isnull()の真逆です。
「True(NaNではない値)」もしくは「False(NaN)」で返されます。
目的に合わせて使い分けることが重要です。
コードサンプル:
import pandas as pd
import numpy as np# サンプルデータ
data = {
‘A’: [1, np.nan, 3],
‘B’: [np.nan, 2, np.nan]
}
df = pd.DataFrame(data)# NaNのチェック
notnull_df = df.notnull()print(“非NaNチェック結果:\n”, notnull_df)
実行結果:
非NaNチェック結果:
A B
0 True False
1 False True
2 True False
欠損値(NaN)を含む行/列を削除
以下のメソッドで、欠損値(NaN)を含む行や列を削除します。
なお、削除する対象は、以下の引数を利用して指定します。
| 引数 | 説明 |
| axis | 0:NaNがある行を削除対象とする。 1:NaNがある列を削除対象とする。 |
| how | any:1つでも「NaN」があれば削除対象とする。(デフォルト) all:すべて「NaN」となっている行/列を削除対象とする。 or条件は「any」で、and条件の時は明示的に「all」を設定します。 |
| thresh | 保持する行/列を決定する基準として、「NaNではない値の最低数」を指定する。 |
| subset | NaNの確認対象とする列/行を指定する。 |
| inplace | True:元のデータにも、変更を適用する。 False:元のデータは、変更されない。(デフォルト) なお、Trueの時は、元のデータフレームが置き換わるので、新しい変数に代入することは無意味とされ、返り値も「None」となります。 |
なお、これらの引数は「,」で組み合わせることが可能です。
ただし、以下には注意する必要があります。
thresh と subset は互いに影響し合いません。
axis=1 を指定すると列方向の操作になり、thresh や subset は無効になります。
そのため、「axis=1 と thresh/subset」「thresh と subset」の組み合わせは、意図通りに動作しません。
コードサンプル:
import pandas as pd
import numpy as np# サンプルデータ
data = {
‘A’: [1, np.nan, 3, np.nan, 5],
‘B’: [np.nan, 2, np.nan, np.nan, 5],
‘C’: [1, 2, np.nan, np.nan,5]
}df = pd.DataFrame(data)
# 各オプションを使用
# 「how」の指定(すべてがNaNの場合に行を削除)
dropped_how = df.dropna(how=’all’)# 「axis」 を指定(NaNを含む列の削除)
dropped_axis = df.dropna(axis=1)# ‘thresh’ を指定(NaN以外が2つ以上ある行を保持)
dropped_thresh = df.dropna(thresh=2)# ‘subset’ を指定(指定した列の値を基準に削除)
dropped_subset = df.dropna(subset=[‘A’, ‘B’])print(“元のデータフレーム:\n”, df)
print(“\n「how=all」:すべてがNaNの場合に行を削除\n”, dropped_how)
print(“\n「axis=1」:NaNを含む列の削除\n”, dropped_axis)
print(“\n「thresh=2」:NaNが2つ以上存在する行を削除\n”, dropped_thresh)
print(“\n「subset=[‘A’, ‘B’]」:A列またはB列に対してNaNがある行を削除\n”, dropped_subset)# 複合条件
dropped_multi = df.dropna(how=’all’, subset=[‘B’, ‘C’], inplace=True)print(“\n複合条件:B列かつC列に対してNaNとなる行を保持\n”, dropped_multi)
print(“\n「inplate=True」による元のデータフレームへの影響\n”, df)
実行結果:
元のデータフレーム:
A B C
0 1.0 NaN 1.0
1 NaN 2.0 2.0
2 3.0 NaN NaN
3 NaN NaN NaN
4 5.0 5.0 5.0「how=all」:すべてがNaNの場合に行を削除
A B C
0 1.0 NaN 1.0
1 NaN 2.0 2.0
2 3.0 NaN NaN
4 5.0 5.0 5.0「axis=1」:NaNを含む列の削除
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4]「thresh=2」:NaNが2つ以上存在する行を削除
A B C
0 1.0 NaN 1.0
1 NaN 2.0 2.0
4 5.0 5.0 5.0「subset=[‘A’, ‘B’]」:A列またはB列に対してNaNがある行を削除
A B C
4 5.0 5.0 5.0B列かつC列に対してNaNとなる行を保持
None「inplate=True」による元のデータフレームへの影響
A B C
0 1.0 NaN 1.0
1 NaN 2.0 2.0
4 5.0 5.0 5.0
まとめ
今回は、Pythonで扱えるライブラリの「Pandas」のメソッドについてまとめてみました。
他にも多くのメソッドが存在するため、複数の記事に渡って解説しています。
他の記事も、ぜひ参考にしてみて下さい。