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

Asad Riaz 2020年6月25日 2020年4月1日 Pandas Pandas DataFrame
  1. 1つまたは複数の列の NaN をカウントする isna() メソッド
  2. 全長から非 NaN の数を減算して、NaN の発生をカウントする
  3. NaN の発生をカウントする df.isnull().sum() メソッド
  4. Pandas DataFrame 全体で NaN の出現回数を数える
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

関連記事 - Pandas DataFrame

  • Pandas DataFrame の列ヘッダーをリストとして取得する方法
  • Pandas DataFrame 列を削除する方法
  • Pandas で DataFrame 列を日時に変換する方法
  • Pandas DataFrame で浮動小数点数 float を整数 int に変換する方法
  • Pandas DataFrame を 1つの列の値で並べ替える方法
  • Pandas group-by と Sum の集計を取得する方法