python - 如何通过考虑前 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 的变量列表
解决方案
它不会是完美的,但你可以通过两个步骤做一些非常接近这个的事情:
- 做你当前的滚动平均计算,如上所述
- 向前填充 (
.ffill()
)
虽然您的第一步只会填充直接出现在值之后的 NA,但第二步将从那里填充。
但是我不确定如果 NA 出现在单个值之后,这将如何处理一个案例,例如
3 2 NaN NaN 3 NaN NaN
听起来您希望将最后两个 NaN 设置为 2.5,但这种方法可能会将它们设置为 3(因为滚动平均值没有足够的前面元素来填充它们)。所以最终这取决于你是否愿意稍微改变你的方法。
推荐阅读
- r - 如何将多个 group_by 参数传递给 dplyr 连接函数?
- c# - 如何检查 RichTextBox c# 中是否存在垂直 ScrollBar?
- c# - 加入两个列表
创建 KeyValuePair 列表 - java - 有没有办法在生成的 WAR 中不包含 jar,同时在 META-INF 的 pom 中包含版本?
- go - 向 Kubernetes GO Operator 添加自定义 Webhook
- node.js - 文件数超过限制时如何捕获 MulterError: Unexpected field?
- python - 是否可以使用 pymsteams 将 markdown 设置为 False?
- php - 从 URL 中删除文件名并在 URL 中保留 2 个 GET 变量?
- python - 在 python 中,如果 v 是 (1,3) numpy 数组,为什么 v[0,:] (3,) 而 v[:,:] 是 (1,3)?
- docker - 在 docker 容器上运行 Jenkins。无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。docker 守护进程是否正在运行?