NaN が Pandas DataFrame に存在するかどうかを確認する方法
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 エントリの数。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn