如何通过考虑前2个观测值的平均值来填充NaN值

时间:2019-04-03 19:45:26

标签: python pandas nan lag

我正在使用以下代码在熊猫中填充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的变量列表

2 个答案:

答案 0 :(得分:0)

这不是完美的,但是您可以通过两个步骤完成与此非常接近的事情:

  1. 像上面那样计算当前的滚动平均值
  2. 转发(.ffill()

虽然第一步仅填充值之后直接出现的NA,但第二步将从那里填充。

但是我不确定如果NA在单个值之后出现,例如

3 2 NaN NaN 3 NaN NaN

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

答案 1 :(得分:0)

我想一个简单的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())