Python:在数组中用NaN或均值替换-999值

2 投票
1 回答
3155 浏览
提问于 2025-04-18 02:02

我有一个这样的数组:

array[1,3,5,-999,3,1,6,8,-999,-999,-999,3,5,7]

其中的 -999 代表缺失的数据,我想把这个 -999 替换成它左右两个数字的平均值,或者直接用 NaN 代替。

在其他问题中,有人问怎么把 NaN 替换成零、平均值等等。而我这里问的是相反的,我想把一个数字替换成 NaN。

1 个回答

3

用nan替换:

A = np.array([1,3,5,-999,3,1,6,8,-999,-999,-999,3,5,7.])
A[A==-999] = np.nan

结果是:

array([  1.,   3.,   5.,  nan,   3.,   1.,   6.,   8.,  nan,  nan,  nan, 3.,   5.,   7.])

如果你想要计算-999值左右的数字的平均值,而不是直接替换的话:

A = np.array([1,3,5,-999,3,1,6,8,-999,-999,-999,3,5,7.])
A[A==-999] = np.nan
mask = np.isnan(A)
A[mask] = np.interp(np.flatnonzero(mask), np.flatnonzero(~mask), A[~mask])

结果是:

array([ 1.  ,  3.  ,  5.  ,  4.  ,  3.  ,  1.  ,  6.  ,  8.  ,  6.75, 5.5 ,  4.25,  3.  ,  5.  ,  7.  ])

撰写回答