NumPy剔除nan值
时间: 2024-11-03 20:19:08 浏览: 21
在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)等方法,再通过布尔索引进行删除。记得,这些操作都不会改变原始数组,而是生成新的数组。
阅读全文