HOWTO · Pandas

Pandas Dataframe の列で NaN の発生をカウントする方法

このチュートリアルでは、isna()や df.isnull().sum()などのさまざまなメソッドを使用して、Pandas Dataframe の列で NaN の発生をカウントする方法を示します。

このページの内容

Pandas の DataFrame の列で NaN の発生をカウントするメソッドを紹介します。ソリューションには、1つまたは複数の列の isna() メソッドと、NaN オカレンスのカウントから合計の長さを引くめそっどと、value_counts メソッドと、df.isnull().sum() メソッドが含まれています。

また、Pandas の DataFrame 全体での NaN の出現総数を計算する方法も紹介します。

1つまたは複数の列の NaN をカウントする isna() メソッド

insna() メソッド(pandas バージョン> 0.21.0)を使用して合計すると、NaN の発生をカウントできます。1つの列について、次のようにします。

import pandas as pd

s = pd.Series([1, 2, 3, np.nan, np.nan])
s.isna().sum()
# or s.isnull().sum() for older pandas versions

出力:

2

いくつかの列では、それも機能します:

import pandas as pd

df = pd.DataFrame({"a": [1, 2, np.nan], "b": [np.nan, 1, np.nan]})
df.isna().sum()

出力:

a    1
b    2
dtype: int64

全長から非 NaN の数を減算して、NaN の発生をカウントする

DataFrame の長さから非 NaN オカレンスのの数を引くことにより、各列の NaN オカレンスの数を取得できます。

import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
    columns=["a", "b", "d"],
    index=["A", "B", "C", "D"],
)
print(df)
print(len(df) - df.count())

出力:

     a    b    d
A  1.0  2.0  NaN
B  NaN  4.0  NaN
C  5.0  NaN  7.0
D  5.0  NaN  NaN
a    1
b    2
d    3
dtype: int64

NaN の発生をカウントする df.isnull().sum() メソッド

df.isnull().sum() メソッドを使用して、各列の NaN オカレンスの数を取得できます。sum メソッド内で axis=0 を渡した場合、すべての列で NaN の発生数が得られます。すべての行で NaN の出現が必要な場合は、axis=1 を設定します。

次のコードについて考えます。

import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
    columns=["a", "b", "d"],
    index=["A", "B", "C", "D"],
)

print("NaN occurrences in Columns:")
print(df.isnull().sum(axis=0))
print("NaN occurrences in Rows:")
print(df.isnull().sum(axis=1))

出力:

NaN occurrences in Columns:
a    1
b    2
d    3
dtype: int64
NaN occurrences in Rows:
A    1
B    2
C    1
D    2
dtype: int64

Pandas DataFrame 全体で NaN の出現回数を数える

DataFrame 内のすべての NaN オカレンスの総数を取得するには、2つの .sum() メソッドをチェーンします:

import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
    columns=["a", "b", "d"],
    index=["A", "B", "C", "D"],
)

print("NaN occurrences in DataFrame:")
print(df.isnull().sum().sum())

出力:

NaN occurrences in DataFrame:
6