代码之家  ›  专栏  ›  技术社区  ›  VaM999

如何用熊猫的滚动平均值填充nan值

  •  10
  • VaM999  · 技术社区  · 7 年前

    我有一个数据框,它在几个地方包含nan值。我正在尝试执行数据清理,其中我用前五个实例的平均值填充nan值。为此,我提出了以下建议。

    input_data_frame[var_list].fillna(input_data_frame[var_list].rolling(5).mean(), inplace=True)
    

    但是,这是行不通的。它没有填充nan值。在上述操作前后,数据帧的空计数没有变化。假设我有一个只包含整数列的数据帧,如何用前五个实例的平均值填充NaN值?提前谢谢。

    3 回复  |  直到 7 年前
        1
  •  11
  •   Joe    7 年前

    这应该可以:

    input_data_frame[var_list]= input_data_frame[var_list].fillna(pd.rolling_mean(input_data_frame[var_list], 6, min_periods=1))
    

    请注意 window 6 因为它包括 NaN 本身(不计入平均数)。还有另一个 南安 值不用于平均值,因此如果窗口中发现的值少于5个,则根据实际值计算平均值。

    示例:

    df = {'a': [1, 1,2,3,4,5, np.nan, 1, 1, 2, 3, 4, 5, np.nan] }
    df = pd.DataFrame(data=df)
    print df
    
          a
    0   1.0
    1   1.0
    2   2.0
    3   3.0
    4   4.0
    5   5.0
    6   NaN
    7   1.0
    8   1.0
    9   2.0
    10  3.0
    11  4.0
    12  5.0
    13  NaN
    

    输出:

          a
    0   1.0
    1   1.0
    2   2.0
    3   3.0
    4   4.0
    5   5.0
    6   3.0
    7   1.0
    8   1.0
    9   2.0
    10  3.0
    11  4.0
    12  5.0
    13  3.0
    
        2
  •  9
  •   Caner Erden    5 年前

    rolling_mean 熊猫的功能已被修改。如果填充整个数据集,则可以使用;

    filled_dataset = dataset.fillna(dataset.rolling(6,min_periods=1).mean())
    
        3
  •  0
  •   Franz Eigner    3 年前

    您可以简单地使用interpolate()

    df = {'a': [1,5, np.nan, np.nan, np.nan, 2, 5, np.nan] }
    df = pd.DataFrame(data=df)
    print(df)
    
    
    df['a'].interpolate()