如何从一个给定的NumPy数组中移除NaN值

如何从一个给定的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)

输出:

如何从一个给定的NumPy数组中移除NaN值?

注:无论数组的维度是多少,它都会被压扁成一个一维数组。

使用 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)

输出:

如何从一个给定的NumPy数组中移除NaN值?

使用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.]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy 数组操作