如何在 Python 中检查 NaN
在 Python 中,“NaN” 代表 “Not a Number”,是一个特殊值,用于表示缺失或未定义的数字数据。它是由 IEEE(电气和电子工程师协会) 浮点算术标准定义的一个特殊值。它通常用于表示数据集中的缺失或未定义的数据。检查 NaN 值是数据预处理和清洗中的重要步骤,因为这些值可能会导致下游计算中出现错误或意外行为。
Python 有多种方法可以检查 NaN 值,但内置的 math 是最常见的方法之一 .isnan() 函数 或使用 numpy 库。
math.isnan() 函数 是内置的 Python 函数之一,可用于检查给定值是否为 NaN。它只需要一个输入,即要验证的值,如果该值为 NaN,则返回 True;否则,返回 False。
例如 :
import math
x = float('nan')
print(math.isnan(x))
y = 2.0
print(math.isnan(y))
输出 :
True
False
使用 math.isnan() 是检查单个变量中的 NaN 值的一种简单有效的方法,但在处理大型数据数组时可能效率较低。
Python 中另一种常见的检查 NaN 值的方法是使用 numpy 库。NumPy 库提供了许多用于处理数据数组的函数,包括可以用于检查数组中 NaN 值的 isnan() 函数。numpy.isnan() 函数 接受一个数组作为参数,并返回一个与输入的形状相同的数组,在输入具有 NaN 的位置处为 True,在其他地方为 False。
比如说 :
import numpy as np
x = np.array([1.0, np.nan, 3.0, np.nan])
print(np.isnan(x))
输出 :
[False True False True]
除了 numpy.isnan() 之外,还可以使用其他 numpy 函数来检查 NaN 值,例如 np.isnan(),它返回与输入数组相同形状的布尔掩码。
您还可以使用 pandas 库中的 pd.isna() 函数 来检查 DataFrame 或 Series 中的 NaN 值。该函数返回一个布尔掩码,对于包含 NaN 值的单元格为 True,而对于包含有效值的单元格为 False。
比如说 :
import pandas as pd
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [5, np.nan, np.nan], 'C': [1, 2, 3]})
print(df.isna())
您还可以使用 pd.isnull() 函数,它等同于 pd.isna()。
您还可以使用 pd.DataFrame.fillna() 函数 将 NaN 值替换为指定的值。要用作 NaN 值替换的值是该函数接受的唯一输入。
比如说:
df.fillna(0, inplace=True)
这将使用值为 0 替换 DataFrame 中的所有 NaN 值。
Python 中检查 NaN 值的另一种方法是使用 numpy.isnan() 函数与 numpy.any() 或 numpy.all() 函数 结合使用。numpy.any() 函数 如果数组中任何元素为 True,则返回 True,否则返回 False。另一方面,numpy.all() 函数 如果数组中的每个元素都为 True,则返回 True;否则返回 False。
例如,要检查数组中是否有任何值为 NaN,可以使用以下代码:
import numpy as np
x = np.array([1.0, np.nan, 3.0, 4.0])
print(np.any(np.isnan(x)))
输出 :
True
它将返回 True,因为数组中的一个元素是 NaN。
类似地,要检查数组中是否所有值都为 NaN,可以使用以下代码:
比如说:
y = np.array([np.nan, np.nan, np.nan, np.nan])
print(np.all(np.isnan(y))
输出 :
True
它将返回 True,因为数组中的所有元素都是 NaN。
您还可以使用 numpy.isinf() 函数 检查数组中的无限值。numpy.isinf() 函数 的工作方式类似于 numpy.isnan() 函数,并在输入具有无限值的位置处返回相同形状的数组中 True,在其他地方为 False。
Python 中检查 NaN 值的另一种方法是使用 pandas.isna() 方法。该方法是 DataFrame 和 Series 的方法,并返回与输入相同形状的布尔掩码,其中包含 NaN 值的单元格为 True,而包含有效值的单元格为 False。
例如,如果您有一个名为 df 的 DataFrame,其中包含列 ‘A’和’B’,并且您想要检查列 ‘A’ 中的 NaN 值,则可以使用:
import pandas as pd
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [5, np.nan, np.nan], 'C': [1, 2, 3]})
print(df['A'].isna())
这将返回一个布尔掩码,在该掩码中,列 ‘A’ 中 NaN 值的位置将为 True。