NaN 是Not a number的缩写。它用于表示未定义的条目。它还用于表示数据集中的缺失值。
NaN 的概念甚至在 Python 创建之前就已经存在。IEEE 浮点算术标准 (IEEE 754) 于 1985 年引入了 NaN。
NaN 是一种特殊的浮点值,不能转换为除 float 之外的任何其他类型。
在本教程中,我们将了解 NaN 在 Pandas 和 Numpy 中的工作原理。
Numpy 中的 NaN
让我们看看 NaN 在Numpy下如何工作。为了观察 NaN 的属性,让我们创建一个包含 NaN 值的 Numpy 数组。
import numpy as np arr = np.array([ 1 , np.nan, 3 , 4 , 5 , 6 , np.nan]) pritn(arr) |
输出 :
[ 1. nan 3. 4. 5. 6. nan] |
1. Numpy 数组上 NaN 的数学运算
让我们尝试在Numpy 数组上调用一些基本函数。
print (arr. sum ()) |
输出 :
nan |
让我们尝试从数组中找到最大值:
print (arr. max ()) |
输出 :
nan |
值得庆幸的是,Numpy 提供了在执行数学运算时忽略 NaN 值的方法。
2. 在 Numpy 数组上执行数学运算时如何忽略 NaN 值
Numpy 为您提供了 np.nansum() 和 np.nanmax() 等方法来在忽略数组中的 NaN 值后计算总和和最大值。
np.nansum(arr) |
输出 :
19.0 |
np.nanmax(arr) |
6.0 |
如果您在 IDE 中启用了自动补全功能,那么在使用 np.nan 时您将看到以下选项列表:
3. 检查 NaN 值
要检查 Numpy 数组中的 NaN 值,可以使用 np.isnan() 方法。
这会输出原始数组大小的布尔掩码。
np.isnan(arr) |
输出 :
[False True False False False False True] |
输出数组对于原始数组中为 NaN 的索引为 true,对于其余索引为 false。
4. 使两个nan相等
两个 NaN 彼此相等吗?
这可能是一个令人困惑的问题。让我们尝试通过运行一些 python 代码来回答这个问题。
a = np.nan b = np.nan |
这两条语句用 nan 初始化两个变量 a 和 b。让我们尝试将两者等同起来。
a = = b |
输出 :
False |
在 Python 中,我们也有is运算符。让我们尝试用它来比较两个变量。
a is b |
输出 :
True |
原因是 == 运算符比较两个操作数的值并检查值是否相等。is operator
另一方面,检查两个操作数是否引用同一个对象。
事实上,你可以打印出 a 和 b 的 ID,发现它们引用的是同一个对象。
id (a) |
输出 :
139836725842784 |
id (b) |
输出 :
139836725842784 |
Pandas Dataframe 中的 NaN
Pandas DataFrame是将数据导入 python 的常见方法。让我们看看如何处理Pandas Dataframe 中的 NaN 值。
让我们从创建一个数据框开始。
s = pd.DataFrame([( 0.0 , np.nan, - 2.0 , 2.0 ), ... (np.nan, 2.0 , np.nan, 1 ), ... ( 2.0 , 5.0 , np.nan, 9.0 ), ... (np.nan, 4.0 , - 3.0 , 16.0 )], ... columns = list ( 'abcd' )) s |
输出 :
1. 检查 NaN 值
您可以使用isnull() 方法检查 NaN 值。输出将是一个布尔掩码,其尺寸与原始数据帧相同。
s.isnull() |
输出 :
2. 替换 NaN 值
有多种方法可以替换 Pandas Dataframe 中的 NaN 值。最常见的方法是使用.fillna() 方法。
此方法要求您指定一个值来替换 NaN。
s.fillna( 0 ) |
输出 :
或者,您也可以按列提及这些值。这意味着一列下的所有 NaN 将被替换为相同的值。
values = { 'a' : 0 , 'b' : 1 , 'c' : 2 , 'd' : 3 } s.fillna(value = values) |
输出 :
您还可以使用插值来填充数据框中的缺失值。与 .fillna() 相比,插值是一种稍微高级的方法。
插值是一种可以估计两个已知数据点之间的未知数据点的技术。
3. 删除包含 NaN 值的行
要删除带有 NaN 的行或列,您可以使用.dropna()方法。
要删除包含 NaN 的行,请使用:
df.dropna() |
要删除包含 NaN 的列,请使用:
df.dropna(axis = 'columns' ) |
结论
本教程是关于 Python 中的 NaN。我们主要关注 Numpy 和 Pandas 中 NaN 的处理。希望您和我们一起学习愉快。