移除数组中的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值的完整攻略。