如何檢查 NaN 是否存在於 Pandas DataFrame 中

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.isnull()方法
  2. pandas.DataFrame.isna() 方法
如何檢查 NaN 是否存在於 Pandas DataFrame 中

NaN 代表不是數字 - Not a Number,表示 Pandas 中缺少的值。要在 Python Pandas 中檢測 NaN 值,我們可以對 DataFrame 物件使用 isnull()isna() 方法。

pandas.DataFrame.isnull()方法

我們可以使用 pandas.DataFrame.isnull() 來檢查 DataFrame 中的 NaN 值。如果要檢查的 DataFrame 中相應的元素具有 NaN 值,則該方法返回布林值的 DataFrame 元素為 True,否則為 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 中的元素不是 NaNTrue 值代表 DataFrame df 中的 NaN 元素。

如果我們想知道 DataFrame 中是否有 NaN 值,可以使用 isnull().values.any() 方法,如果 DataFrame 中有任何 NaN 值則返回 True;如果 DataFrame 中甚至沒有單個 NaN 元素,則為 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 表示形式。如果任何元素被評估為 True,那麼 numpy.any() 返回 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

如果 DataFrame 中的任何元素為 NaN,則上例中的 isnull() 之後的兩個級聯的 any() 方法將返回 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,則表示 DataFrame 中存在 NaN

pandas.DataFrame.isna() 方法

pandas.DataFrame.isna() 方法類似於
pandas.DataFrame.isnull()。兩種方法的工作之間沒有任何區別。它們只是名稱不同。

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
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

相關文章 - Pandas NaN