如何从给定的 NumPy 数组中删除 NaN 值?
在本文中,我们将学习如何从给定数组中删除 Nan 值。 man 值是那些没有与之关联的特定值的值,或者它们与要在声明的数组中使用的值的类型不同。
基本上有两种方法以相同的方式工作,只是语法略有不同。我们可以使用 NumPy 中指定的函数,也可以使用运算符,基本工作是相同的。
方法 #1:使用 numpy.logical_not() 和 numpy.nan() 函数
numpy.isnan() 将为值为 nan 的所有索引提供真正的索引,并且当与 numpy.logical_not()函数结合使用时,布尔值将被反转。所以,最后,我们得到了所有非 nan 元素的索引。从索引中,我们可以过滤掉不是 nan 的值,并将其保存在另一个数组中。
Python3
import numpy
# create a 1D array
a = numpy.array([5, 2, 8, 9, 3, numpy.nan,
2, 6, 1, numpy.nan])
# remove nan values using numpy.isnan()
# and numpy.logical_not
b = a[numpy.logical_not(numpy.isnan(a))]
# print the results
print("original 1D array ->", a)
print("1D array after removing nan values ->", b)
print()
# create a 2D array
c = numpy.array([[6, 2, numpy.nan], [2, 6, 1],
[numpy.nan, 1, numpy.nan]])
# remove nan values using numpy.isnan()
# and numpy.logical_not
d = c[numpy.logical_not(numpy.isnan(c))]
# print the results
print("Original 2D array ->")
print(c)
print("2D array converted to 1D after removing nan values ", d)
Python3
import numpy
# create a 2D array
c = numpy.array([[12, 5, numpy.nan, 7],
[2, 61, 1, numpy.nan],
[numpy.nan, 1,
numpy.nan, 5]])
# remove nan values using numpy.isnan()
# and numpy.logical_not
d = c[~(numpy.isnan(c))]
# print the results
print("Original 2D array ")
print(c)
print()
print("2D array converted to 1D after removing nan values ")
print(d)
输出:
注意:无论数组的Dimension是什么,都会被展平成一维数组
方法#2:将 ~运算符而不是 numpy.logical_not() 与 numpy.isnan()函数结合起来。这将与上面的工作方式相同,它将任何维度数组转换为一维数组。
例如,在下面的代码中,仅显示了 2D 数组。
Python3
import numpy
# create a 2D array
c = numpy.array([[12, 5, numpy.nan, 7],
[2, 61, 1, numpy.nan],
[numpy.nan, 1,
numpy.nan, 5]])
# remove nan values using numpy.isnan()
# and numpy.logical_not
d = c[~(numpy.isnan(c))]
# print the results
print("Original 2D array ")
print(c)
print()
print("2D array converted to 1D after removing nan values ")
print(d)
输出: