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 が表示されます。

次に、次のテンプレートを使用して、単一の 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 値が存在することが確認されます。

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 つのインスタンスが表示されます。

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」) が表示されます。

(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 値が取得されます。

カウントを取得するための別のアプローチは次のとおりです。
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 つ取得されます。

(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 値のインスタンスが取得されます。

次に、この構文を適用して、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 値が存在することが確認されます。

コードから .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)
内訳の結果は次のとおりです。

(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 になります。

列ごとに 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)
そして結果は次のとおりです。
