【问题标题】:How to fill NaN values by considering average of previous 2 observations如何通过考虑前 2 个观察值的平均值来填充 NaN 值
【发布时间】:2019-04-04 04:36:07
【问题描述】:

我正在使用以下代码在 pandas 中填充 NaN 值。这个df有不同的气候变量(温度、湿度、降雨量、植被......)

df1[var_list]= df1[var_list].fillna(df1[var_list].rolling(3, min_periods=1).mean())

我想用该列中前 2 个值的平均值填充 NaN。在 df 的某些部分,我有连续的 8 个 NaN,所以上面的代码只填充了前 2 个 NaN。这是上面给出的代码的正确输出。

但我想填充所有的 NaN(可能取估算的 NaN 值的平均值?-但我不知道如何做到这一点,因为我是 python 新手)。有一个更好的方法吗。我将对我的 ML 模型使用时滞输入,因此我不能放弃任何观察。

var_list ==> 包含具有 NaN 的变量列表

【问题讨论】:

    标签: python pandas nan lag


    【解决方案1】:

    这并不完美,但您可以通过两个步骤完成非常接近此的操作:

    1. 按照上述方法进行当前的滚动平均计算
    2. 向前填充 (.ffill())

    虽然您的第一步只会填充直接出现在值之后的 NA,但第二步将从那里开始填充。

    但是我不确定如果 NA 出现在单个值之后,这将如何处理一个案例,例如

    3 2 NaN NaN 3 NaN NaN
    

    听起来您希望将最后两个 NaN 设置为 2.5,但这种方法可能会将它们设置为 3(因为滚动平均值没有足够的前面元素来填充它们)。所以最终这取决于你是否愿意稍微改变你的方法。

    【讨论】:

      【解决方案2】:

      我想一个简单的 joe 方法可能是一遍又一遍地做,直到通过检查没有留下 NaN

      
      while df1.isnull().values.any() is True:
          df1[var_list]= df1[var_list].fillna(df1[var_list].rolling(3, min_periods=1).mean())
      
      

      【讨论】:

        猜你喜欢
        • 2021-10-09
        • 2020-10-20
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        相关资源
        最近更新 更多