📜  检查 np 数组中的 nan 值 - Python (1)

📅  最后修改于: 2023-12-03 15:26:43.535000             🧑  作者: Mango

检查numpy数组中的NaN值

在Python编程中,经常会使用Numpy库中的数组。在处理数据时,有时会遇到数组中包含NaN(Not a Number)值的情况。NaN值表示无法表示为浮点数的数字,可能是缺失值或无效值。在数据分析和机器学习中,处理NaN值是很常见的操作。下面介绍几种检查numpy数组中的NaN值方法。

方法一:np.isnan()

numpt库中提供了一个函数np.isnan(),用来检查数组中的NaN值。np.isnan()会返回一个布尔类型数组,其中包含了相同形状的True和False值,True表示数组中对应的值为NaN,False表示数组中对应的值不是NaN。

import numpy as np
arr = np.array([1, 2, np.nan, 4, np.nan])
print(np.isnan(arr))

输出:

array([False, False,  True, False,  True])
方法二:np.isfinite()

如果想要检查数组元素是否为NaN或无穷大(inf)的话,可以使用np.isfinite()函数。与np.isnan()类似,np.isfinite()返回一个布尔类型数组,其中包含了相同形状的True和False值,True表示数组中对应的值为有限数,False表示数组中对应的值为NaN或无穷大。

import numpy as np
arr = np.array([1, 2, np.nan, np.inf, -np.inf])
print(np.isfinite(arr))

输出:

array([ True,  True, False, False, False])
方法三:np.count_nonzero()

如果想要知道数组中有多少个NaN值或无穷大的值,可以使用np.count_nonzero()函数。这个函数将返回数组中非零元素的个数。

import numpy as np
arr = np.array([1, 2, np.nan, np.inf, -np.inf])
print(np.count_nonzero(np.isnan(arr)))
print(np.count_nonzero(np.isinf(arr)))

输出:

1
2

说明数组arr中有1个NaN值和2个无穷大的值。

方法四:np.isnan()和np.isfinite()的组合使用

在实际应用中,对于含有NaN或无穷大的数组,通常需要对这些值进行一些替换或是删除操作。这时可以将np.isnan()和np.isfinite()函数组合起来使用。找出数组中的NaN和无穷大的值并进行替换或删除。

import numpy as np
arr = np.array([1, 2, np.nan, np.inf, -np.inf])
arr[np.isnan(arr)] = 0
arr[np.isinf(arr)] = 0
print(arr)

输出:

array([1., 2., 0., 0., 0.])

首先将数组中的所有NaN值和无穷大的值替换为0。

import numpy as np
arr = np.array([1, 2, np.nan, np.inf, -np.inf])
arr = arr[np.isfinite(arr)]
print(arr)

输出:

array([1., 2.])

其次,使用np.isfinite()函数找到数组中的有限值,并删除NaN和无穷大的值。