如何从一个给定的NumPy数组中移除NaN值
在这篇文章中,我们将学习如何从一个给定的数组中删除Nan值。楠木值是那些没有与之相关的特定值的值,或者它们与声明的数组中要使用的值的类型不同。
基本上有三种方法,在语法上略有不同。我们既可以使用NumPy中指定的函数,也可以使用运算符,基本工作原理是一样的。
使用numpy.logical_not()和numpy.nan()函数
numpy.isan()将为所有值为nan的索引提供真实的索引,当与numpy.logical_not()函数结合时,布尔值将被反转。因此,最终我们得到了所有不是nan的元素的索引。从这些索引中,我们可以过滤出不属于nan的值,并将它们保存在另一个数组中。
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)
输出:
注:无论数组的维度是多少,它都会被压扁成一个一维数组。
使用 np.isnan() 从一个给定的NumPy中移除NaN值
将~运算符代替n umpy.logical_not()与n umpy.isan()函数相结合。这将与上面的工作方式相同,它将把任何维度的数组转换成一维数组。
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)
输出:
使用np.isfinite 从一个给定的NumPy中移除NaN值
numpy.isfinite()函数从元素的角度测试它是否是有限的(不是无穷大或不是一个数字),并将结果作为一个布尔数组返回。使用这个函数,我们将得到所有非纳米元素的索引。从这些索引中,我们可以过滤出不属于nan的值,并将它们保存在另一个数组中。
import numpy as np
# create a 2D array
c = np.array([[12, 5, np.nan, 7],
[2, 61, 1, np.nan],
[np.nan, 1,
np.nan, 5]])
# remove nan values using numpy.isnan()
# and numpy.logical_not
d = c[np.isfinite(c)]
# print the results
print("Original 2D array ")
print(c, '\n')
print("2D array converted to 1D after removing nan values ")
print(d)
输出:
Original 2D array
[[12. 5. nan 7.]
[ 2. 61. 1. nan]
[nan 1. nan 5.]]
2D array converted to 1D after removing nan values
[12. 5. 7. 2. 61. 1. 1. 5.]