如何在 Python 的 NumPy 中去除 NaN 值?
时间: 2024-04-16 08:26:21 浏览: 254
在 NumPy 中,可以使用 `numpy.isnan()` 函数来判断数组中的元素是否为 NaN。要去除数组中的 NaN 值,可以使用 `numpy.isnan()` 结果的布尔索引来筛选数组。
下面是一个示例代码:
```python
import numpy as np
arr = np.array([1, 2, np.nan, 4, np.nan, 6])
# 判断数组中的元素是否为 NaN
mask = np.isnan(arr)
# 使用布尔索引筛选出非 NaN 值
new_arr = arr[~mask]
print(new_arr)
```
输出结果:
```
[1. 2. 4. 6.]
```
在上面的代码中,首先使用 `numpy.isnan()` 函数判断数组 `arr` 中的元素是否为 NaN,并将结果保存在 `mask` 中。然后,使用布尔索引 `~mask` 来筛选出非 NaN 值,将其保存在 `new_arr` 中。最后,打印输出 `new_arr`。
这样就可以在 NumPy 中去除数组中的 NaN 值了。
相关问题
python numpy 去掉nan
你可以使用`numpy.isnan()`函数来判断数组中的元素是否为NaN(Not a Number),然后使用布尔索引来过滤掉NaN值。以下是一个示例:
```python
import numpy as np
arr = np.array([1, 2, np.nan, 3, 4, np.nan])
# 使用布尔索引过滤掉NaN值
arr_without_nan = arr[~np.isnan(arr)]
print(arr_without_nan)
```
输出结果为:`[1. 2. 3. 4.]`
在上述示例中,`np.isnan(arr)`返回一个布尔数组,表示`arr`中的每个元素是否为NaN。然后,使用取反操作符`~`将布尔数组取反,得到一个新的布尔数组,表示不是NaN的元素。最后,将该布尔数组作为索引应用于原始数组`arr`,即可获取不含NaN的新数组`arr_without_nan`。
NumPy剔除nan值
在NumPy中,剔除(或过滤掉)含有NaN(Not a Number)值的元素,可以使用`np.isnan()`函数配合`numpy.where()`、`~`(否定运算符)和布尔索引来完成。以下是一些常见的方式:
1. **使用where()函数筛选出非NaN值**:
```python
import numpy as np
arr = np.array([1.0, np.nan, 3.0, np.nan, 5.0])
non_nan_indices = ~np.isnan(arr) # 返回一个布尔数组,True表示非NaN
filtered_arr = arr[non_nan_indices]
```
2. **结合数组和布尔索引**:
```python
non_nan_mask = np.isfinite(arr) # 或者 np.logical_not(np.isnan(arr))
filtered_arr = arr[non_nan_mask]
```
3. **使用条件表达式**:
```python
filtered_arr = arr[np.logical_and(~np.isnan(arr), np.isfinite(arr))]
```
这三种方法都可以得到一个不含NaN值的新数组。如果你只是想去除含有NaN的行或列,可以结合使用`np.isnan().any(axis=0)`(沿列检查是否有NaN)或`np.isnan().all(axis=0)`(沿列检查是否所有元素都是NaN)等方法,再通过布尔索引进行删除。记得,这些操作都不会改变原始数组,而是生成新的数组。
阅读全文