首页 > 解决方案 > 如何通过考虑前 2 个观察值的平均值来填充 NaN 值

问题描述

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

标签: pythonpandasnanlag

解决方案


它不会是完美的,但你可以通过两个步骤做一些非常接近这个的事情:

  1. 做你当前的滚动平均计算,如上所述
  2. 向前填充 ( .ffill())

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

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

3 2 NaN NaN 3 NaN NaN

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


推荐阅读