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

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.isnull() メソッド
  2. pandas.DataFrame.isna() メソッド
NaN が Pandas DataFrame に存在するかどうかを確認する方法

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

pandas.DataFrame.isnull() メソッド

pandas.DataFrame.isnull() メソッドを使用して、DataFrameNaN 値を確認できます。このメソッドは、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 dfNaN エントリを表します。

DataFrame に NaN 値があるかどうかを知りたい場合は、isnull().values.any() メソッドを使用して、DataFrame に NaN 値がある場合に True を返し、DataFrameNaN エントリが 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 を返し、dfpd.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 が存在するかどうかを確認する

特定の DataFrameNaN 値の総数をカウントする場合は、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 を返します。そのエントリには、dfNaN 値が存在することを示すブール値が含まれています。同様に、df.isna().values.any()df.isna().any().any()df.isna().sum().sum() は、df 全体の NaN 値と dfNaN エントリの数。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas NaN