HOWTO · Pandas

NaN が Pandas DataFrame に存在するかどうかを確認する方法

isnull()および isna()メソッドを使用して、Pandas DataFrame に NaN が存在するかどうかを確認できます。

このページの内容

NaN は Pandas の欠損値を表す Not a Number を意味します。Python Pandas で NaN 値を検出するには、DataFrame オブジェクトに isnull() および isna() メソッドを使用できます。

pandas.DataFrame.isnull() メソッド

pandas.DataFrame.isnull() メソッドを使用して、DataFrame の NaN 値を確認できます。このメソッドは、NaN 値をチェックする DataFrame の対応する要素に NaN 値がある場合に要素が True であるブール値の DataFrame を返し、そうでない場合は要素が False になります。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
        "Height": [1.63, 1.5, np.nan, np.nan, 1.4],
        "Weight": [np.nan, 56, 73, np.nan, 44],
    }
)

df_check = df.isnull()

print(df_check)

出力:

   Student  Height  Weight
0    False   False    True
1    False   False   False
2    False    True   False
3    False    True    True
4    False   False   False

ここで、出力の False 値は DataFrame df のエントリが NaN ではないことを表し、True 値は DataFrame df の NaN エントリを表します。

DataFrame に NaN 値があるかどうかを知りたい場合は、isnull().values.any() メソッドを使用して、DataFrame に NaN 値がある場合に True を返し、DataFrame に NaN エントリが 1つもない場合は False。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
        "Height": [1.63, 1.5, np.nan, np.nan, 1.4],
        "Weight": [np.nan, 56, 73, np.nan, 44],
    }
)

check_for_nan = df.isnull().values.any()
print(check_for_nan)

出力:

True

df.isnull().values は DataFrame の NumPy 表現を返します。numpy.any() は、いずれかの要素が True と評価された場合に True を返します。

したがって、DataFrame に NaN が存在する場合、df.isnull().values.any() は True です。

df.isnull().any().any() は、NaN が存在するかどうかを確認する

df.any() は、いずれかの要素が True かどうかを返します。df が DataFrame の場合は pd.Series を返し、df が pd.Series の場合はブール値を返します。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
        "Height": [1.63, 1.5, np.nan, np.nan, 1.4],
        "Weight": [np.nan, 56, 73, np.nan, 44],
    }
)

check_for_nan = df.isnull().any().any()

print(check_for_nan)

出力:

True

上記の例の isnull() の後にカスケードされた 2つの any() メソッドは、DataFrame でいずれかの要素が NaN の場合に True を返します。

isnull().sum().sum() は、NaN が存在するかどうかを確認する

特定の DataFrame の NaN 値の総数をカウントする場合は、df.isnull().sum().sum() メソッドが適切なソリューションです。このメソッドは、DataFrame 全体の NaN 値の総数を返します。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
        "Height": [1.63, 1.5, np.nan, np.nan, 1.4],
        "Weight": [np.nan, 56, 73, np.nan, 44],
    }
)

total_nan_values = df.isnull().sum().sum()
print(total_nan_values)

出力:

4

結果が 0 より大きい場合、NaN が DataFrame に存在することを意味します。

pandas.DataFrame.isna() メソッド

pandas.DataFrame.isna() メソッドは次のようになります
pandas.DataFrame.isnull()。2つの方法の動作に違いはありません。名前のみが異なります。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
        "Height": [1.63, 1.5, np.nan, np.nan, 1.4],
        "Weight": [np.nan, 56, 73, np.nan, 44],
    }
)

df_check = df.isna()

check_for_any_nan = df.isna().values.any()
# Or
check_for_any_nan = df.isna().any().any()
total_nan_values = df.isna().sum().sum()
print(df_check)
print("NaN Presence:" + str(check_for_any_nan))
print("Total Number of NaN values:" + str(total_nan_values))

出力:

   Student  Height  Weight
0    False   False    True
1    False   False   False
2    False    True   False
3    False    True    True
4    False   False   False
NaN Presence:True
Total Number of NaN values:4

ここでメソッド df.isna() は DataFrame を返します。そのエントリには、df に NaN 値が存在することを示すブール値が含まれています。同様に、df.isna().values.any()、df.isna().any().any()、df.isna().sum().sum() は、df 全体の NaN 値と df の NaN エントリの数。