在Numpy阵列中使用NaN的方法

481 阅读2分钟

NumPy使用IEEE标准的二进制浮点运算(IEEE 754)。这意味着Not a Number并不等同于无穷大。NaNNANnan 的别名。

np.nan

np.nan是Not a Number的IEEE 754浮点表示。nan代表 "不是一个数字",它的主要常数是作为数组中任何缺失的数值的占位符。

nan值是numpy中定义的常数:nan、inf。 NaN可以作为穷人的面具,这意味着你不关心原始值是什么。

虽然我们已经介绍了一些处理NaN值的不同方法,但我想更深入地介绍一下NumPy中的一些NaN函数。

你所要处理的大部分数据都是给你的。正如我们所看到的,当我们使用Pandas导入DataFrame时,任何缺失的值都会自动替换为NaN作为占位符。但是我们也可以在NumPy中直接模仿同样的行为。

语法

numpy.nan

例子

请看下面的代码:

# app.py

import numpy as np

myarr = np.array([1, 0, np.nan, 3])

print(myarr)

输出

python3 app.py
[ 1.  0. nan  3.]

我希望你从这里得到的重要信息是,我们所有的整数都被转换为浮点数,这是因为NumPy已经将NaN数据类型定义为浮点数。所以由于隐式上传法,我们所有的元素都被转换为浮点数 数据类型。

当对其进行数学运算时,NaN项也优先于其他每项。

请看控制台中的nan值:

# app.py

import numpy as np

print(np.nan)

输出

python3 app.py
nan

让我们比较两个NaN值,看看它们是否相同:

# app.py

import numpy as np

print(np.nan == np.nan)

輸出

python3 app.py
False

Numpy isnan()

Numpy isnan()函数测试NaN的元素,并将结果作为布尔数组返回。Numpy使用IEEE二进制浮点运算标准(IEEE 754)。这意味着Not a Number并不等同于无穷大:

# app.py

import numpy as np

print(np.isnan(np.nan))

输出

python3 app.py
True

结论

当你为机器学习或人工智能准备数据时,首先必须检查它,然后确保你在预处理阶段已经删除或替换了每个NaN元素。

缺少一个NaN元素都会给你的最终结果带来重大问题,因为它能够在你的数据中传播。

本教程到此结束。

参见

Python isnan()

Python isinf()

Numpy isfinite()

Numpy isreal()

Numpy save()