如何检查 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