Pandas DataFrame で NaN をチェックする 4 つの方法は次のとおりです。

(1)単一のDataFrame列の下でNaNをチェックする:

df['column name'].isnull().values.any()

(2)単一のDataFrame列の下のNaNを数える:

df['column name'].isnull().sum()

(3)DataFrame全体でNaNをチェックする

df.isnull().values.any()

(4)DataFrame全体のNaNを数える:

df.isnull().sum().sum()

Pandas DataFrame で NaN をチェックする例

(1)単一のデータフレーム列のNaNをチェックする(データフレームにNaN値が存在するかどうかをチェックする)

次の例では、数値のセットと 3 つの NaN 値を含む DataFrame を作成します。

import pandas as pd
import numpy as np

data = {'set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan]}

df = pd.DataFrame(data)

print(df)

3 つの NaN 値を含む DataFrame が表示されます。

Pandas DataFrame で NaN をチェックする 1

次に、次のテンプレートを使用して、単一の DataFrame 列の下で NaN をチェックできます。

df['column name'].isnull().values.any()

この例では (目的の列名は ‘set_of_numbers’ です)、次のようになります。

import pandas as pd
import numpy as np

data = {'set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan]}

df = pd.DataFrame(data)

check_for_nan = df['set_of_numbers'].isnull().values.any()

print(check_for_nan)

コードを実行すると、「True」が返され、DataFrame 列の下に NaN 値が存在することが確認されます。

Pandas DataFrame で NaN をチェックする 2

NaN 値が存在するインスタンスの実際の内訳を取得したい場合は、コードから .values.any() を削除します。

import pandas as pd
import numpy as np

data = {'set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan]}

df = pd.DataFrame(data)

check_for_nan = df['set_of_numbers'].isnull()

print(check_for_nan)

NaN 値の 3 つのインスタンスが表示されます。

Pandas DataFrame で NaN をチェックする 3

NaN 値が存在するすべてのインスタンスを取得できる別の方法を次に示します。

import pandas as pd
import numpy as np

data = {'set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan]}

df = pd.DataFrame(data)

df.loc[df['set_of_numbers'].isnull(), 'value_is_NaN'] = 'Yes'
df.loc[df['set_of_numbers'].notnull(), 'value_is_NaN'] = 'No'

print(df)

ここで、NaN 値が存在するすべてのインスタンスを示す新しい列 (「value_is_NaN」) が表示されます。

Pandas DataFrame で NaN をチェックする 4

(2)単一のDataFrame列の下のNaNを数える

単一の DataFrame 列の下の NaN 値をカウントするには、次の構文を適用できます。

df['column name'].isnull().sum()

私たちの例:

import pandas as pd
import numpy as np

data = {'set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan]}

df = pd.DataFrame(data)

count_nan = df['set_of_numbers'].isnull().sum()

print('Count of NaN: ' + str(count_nan))

すると、3 つの NaN 値が取得されます。

Pandas DataFrame で NaN をチェックする 5

カウントを取得するための別のアプローチは次のとおりです。

import pandas as pd
import numpy as np

data = {'set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan]}

df = pd.DataFrame(data)

df.loc[df['set_of_numbers'].isnull(), 'value_is_NaN'] = 'Yes'
df.loc[df['set_of_numbers'].notnull(), 'value_is_NaN'] = 'No'

count_nan = df.loc[df['value_is_NaN'] == 'Yes'].count()

print(count_nan)

前と同様に、NaN 値のインスタンスの数が 3 つ取得されます。

Pandas DataFrame で NaN をチェックする 6

(3) DataFrame全体のNaNをチェックする

では、元のDataFrameに2つ目の列を追加してみましょう。この列には、NaN値を含む別の数値セットが含まれます。

import pandas as pd
import numpy as np

data = {'first_set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan],
        'second_set_of_numbers': [11, 12, np.nan, 13, 14, np.nan, 15, 16, np.nan, np.nan, 17, np.nan, 19]}

df = pd.DataFrame(data)

print(df)

コードを実行すると、DataFrame 全体で 8 つの NaN 値のインスタンスが取得されます。

Pandas DataFrame で NaN をチェックする 7

次に、この構文を適用して、DataFrame 全体の NaN 値の存在を確認できます。

df.isnull().values.any()

私たちの例:

import pandas as pd
import numpy as np

data = {'first_set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan],
        'second_set_of_numbers': [11, 12, np.nan, 13, 14, np.nan, 15, 16, np.nan, np.nan, 17, np.nan, 19]}

df = pd.DataFrame(data)

check_nan_in_df = df.isnull().values.any()

print(check_nan_in_df)

コードを実行すると、「True」が返され、DataFrame に NaN 値が存在することが確認されます。

Pandas DataFrame で NaN をチェックする 8

コードから .values.any() を削除すると、さらに詳しく分析できます。

import pandas as pd
import numpy as np

data = {'first_set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan],
        'second_set_of_numbers': [11, 12, np.nan, 13, 14, np.nan, 15, 16, np.nan, np.nan, 17, np.nan, 19]}

df = pd.DataFrame(data)

check_nan_in_df = df.isnull()

print(check_nan_in_df)

内訳の結果は次のとおりです。

Pandas DataFrame で NaN をチェックする 9

(4) DataFrame全体のNaNを数える

このテンプレートを使用して、DataFrame 全体の NaN 値をカウントできるようになりました。

df.isnull().sum().sum()

例のコードは次のとおりです。

import pandas as pd
import numpy as np

data = {'first_set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan],
        'second_set_of_numbers': [11, 12, np.nan, 13, 14, np.nan, 15, 16, np.nan, np.nan, 17, np.nan, 19]}

df = pd.DataFrame(data)

count_nan_in_df = df.isnull().sum().sum()

print('Count of NaN: ' + str(count_nan_in_df))

すると合計は 8 になります。

Pandas DataFrame で NaN をチェックする 10

列ごとに NaN の数を取得する場合は、次のコードを使用できます。

import pandas as pd
import numpy as np

data = {'first_set_of_numbers': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan, 8, 9, 10, np.nan],
        'second_set_of_numbers': [11, 12, np.nan, 13, 14, np.nan, 15, 16, np.nan, np.nan, 17, np.nan, 19]}

df = pd.DataFrame(data)

count_nan_in_df = df.isnull().sum()

print(count_nan_in_df)

そして結果は次のとおりです。

Pandas DataFrame で NaN をチェックする 11