【Python】Pandasのメソッドの紹介~欠損値の処理①~

Pythonの言語は、今ではEXCELでも利用できるようになっています。

EXCELでのPython利用は、基本的にはデータ分析の分野で利用することになるでしょう。

Pythonには、データ分析に役立つ「Pandas」というライブラリがあります。

これまでにも概要をまとめた記事(リンク)がありますが、「データフレーム」という形で「データ」を扱えるのが特徴です。

今回は「Pandas」の中でも、欠損値の処理を行うメソッドについて、まとめようと思います。

欠損値(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のチェック
isnull_df = df.isnull()

print(“NaNチェック結果:\n”, isnull_df)

実行結果:

NaNチェック結果:

        A    B
0  False  True
1  True  False
2  False  True

欠損値(NaN)ではないことを判定

以下のメソッドで、データフレームの各要素が欠損値(NaN)であるかどうかを判定します。

notnull()

ただし、結果は、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)を含む行や列を削除します。

dropna()

なお、削除する対象は、以下の引数を利用して指定します。

引数 説明
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.0

B列かつ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」のメソッドについてまとめてみました。

他にも多くのメソッドが存在するため、複数の記事に渡って解説しています。

他の記事も、ぜひ参考にしてみて下さい。

広告