【问题标题】:Replace NaN values with previous no-NaN value in a 1d Numpy array将 NaN 值替换为 1d Numpy 数组中先前的非 NaN 值
【发布时间】: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])

提前致谢。

托马索

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    如果 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
    

    【讨论】:

      【解决方案2】:

      如果不使用 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])

      【讨论】:

        猜你喜欢
        • 2012-03-21
        • 1970-01-01
        • 2019-05-10
        • 1970-01-01
        • 2018-12-05
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多