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

2024-06-01 08:02:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的代码来填充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模型,这样我就不能放弃任何观察

变量列表==>;包含具有NAN的变量列表


Tags: 代码pandasdf列表varnan温度list
2条回答

这并不完美,但你可以通过两个步骤来实现这一点:

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

虽然第一步将只填充直接出现在值之后的NAs,但第二步将从此处填充

但是我不确定这将如何处理NAs在单个值之后出现的情况,例如

3 2 NaN NaN 3 NaN NaN

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

我想一个简单的方法就是一遍又一遍地做,直到通过做一次检查没有多余的n


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

相关问题 更多 >