【发布时间】:2020-12-08 03:13:11
【问题描述】:
我有一个包含 NaN 且没有 NaN 值的一维 Numpy 数组:
arr = np.array([4, np.nan, np.nan, 3, np.nan, 5])
我需要将 NaN 值替换为之前的 no-NaN 值,并将 no-NaN 值替换为 NaN,如下所示:
result = np.array([np.nan, 4, 4, np.nan, 3, 5])
提前致谢。
托马索
【问题讨论】:
我有一个包含 NaN 且没有 NaN 值的一维 Numpy 数组:
arr = np.array([4, np.nan, np.nan, 3, np.nan, 5])
我需要将 NaN 值替换为之前的 no-NaN 值,并将 no-NaN 值替换为 NaN,如下所示:
result = np.array([np.nan, 4, 4, np.nan, 3, 5])
提前致谢。
托马索
【问题讨论】:
如果 Pandas 可用,您可以使用 ffill(),然后将原始非 Nan 值替换为布尔掩码:
import pandas
arr2 = pd.Series(arr).ffill()
mask = ~np.isnan(arr) # all elements which started non-NaN
mask[-1] = False # last element will never forward-fill
arr2[mask] = np.nan # replace non-NaNs with NaNs
输出:
arr2
0 NaN
1 4.0
2 4.0
3 NaN
4 3.0
5 5.0
dtype: float64
【讨论】:
如果不使用 pandas 则:
arr = np.array([4.1, np.nan, np.nan, 3.1, np.nan, 5.1])
arr2 = np.array([])
val=0
for n in arr:
if ~np.isnan(n):
val = n
arr2= np.append(arr2,np.nan)
else:
arr2= np.append(arr2,val)
输出:
啊
数组([4.1, nan, nan, 3.1, nan, 5.1])
arr2
数组([nan, 4.1, 4.1, nan, 3.1, nan])
【讨论】: