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

  • Post category:Python

移除数组中的NaN值通常是数据预处理的重要步骤之一。在NumPy中,可以使用numpy.isnan函数找到数组中的NaN值,然后通过各种方式将其移除。

以下是移除NumPy数组中NaN值的完整攻略:

Step 1:导入NumPy库

首先,需要导入NumPy库:

import numpy as np

Step 2:创建一个有NaN值的数组

接下来,我们在示例中创建一个有NaN值的数组,并将其赋值给变量arr

arr = np.array([1, 2, np.nan, 4, 5])
print(arr)

Output:

[ 1.  2. nan  4.  5.]

Step 3:检查数组中的NaN值

可以使用numpy.isnan函数检查数组中的NaN值:

mask = np.isnan(arr)
print(mask)

Output:

[False False  True False False]

此时返回的是一个布尔型数组,其中True表示该位置为NaN值。该数组可用于选择需要保留的值。

Step 4:删除数组中的NaN值

一旦有了标记数组,可以使用以下任意一种方法将数组中的NaN值删除:

方法1:使用numpy.delete函数

可以调用numpy.delete函数并将NaN值的索引作为输入来删除NaN值:

arr_no_nan = np.delete(arr, np.where(mask))
print(arr_no_nan)

Output:

[1. 2. 4. 5.]

方法2:使用布尔型索引

可以使用布尔型索引来保留非NaN值:

arr_no_nan2 = arr[~mask]
print(arr_no_nan2)

Output:

[1. 2. 4. 5.]

这与上面的numpy.delete的结果相同。

示例说明:

示例1:

删除多维数组arr中的NaN值,并打印结果。

import numpy as np

arr = np.array([[1, 2, np.nan], [4, 5, 6], [np.nan, 8, 9]])
mask = np.isnan(arr)
arr_no_nan = np.delete(arr, np.where(mask))
print(arr_no_nan)

Output:

[1. 2. 4. 5. 6. 8. 9.]

示例2:

从一维数组arr中删除NaN值,并打印结果。

import numpy as np

arr = np.array([1, 2, np.nan, 4, 5])
mask = np.isnan(arr)
arr_no_nan = np.delete(arr, np.where(mask))
print(arr_no_nan)

Output:

[1. 2. 4. 5.]

以上就是从NumPy数组中移除NaN值的完整攻略。