我正在使用以下代码在熊猫中填充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的变量列表
答案 0 :(得分:0)
这不是完美的,但是您可以通过两个步骤完成与此非常接近的事情:
.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())