python - 如何在第一个非 nan 值之后将 NaN 填充为 0
问题描述
我需要从第一个非 nan 值开始用 static填充NaN
my的值。df
0
在某种程度上,将method="ffill"
(识别每列的第一个值,并且只作用于后面的NaN
值)与value=0
(填充为 0,而不是 df 中的变量)。
我怎样才能做到这一点?这篇文章很接近,但不是:How to replace NaNs by previous or next values in pandas DataFrame?
示例 df
0 1 2
0 NaN NaN NaN
1 6.0 NaN 1.0
2 NaN 3.0 NaN
3 NaN NaN 4.0
期望的输出:
0 1 2
0 NaN NaN NaN
1 6.0 NaN 1.0
2 0.0 3.0 0.0
3 0.0 0.0 4.0
如果可以的话,df.fillna(value=0, method='ffill')
那就太好了。但这又回来了ValueError: Cannot specify both 'value' and 'method'.
编辑:哦,时间很重要。我们正在谈论约 60M 行和 4k 列 - 所以循环是不可能的,并且只有在非常非常快的情况下才进行屏蔽
解决方案
您可以尝试mask()
,ffill()
并且fillna()
:
df=df.fillna(df.mask(df.ffill().notna(),0))
#OR via where
df=df.fillna(df.where(df.ffill().isna(),0))
输出:
0 1 2
0 NaN NaN NaN
1 6.0 NaN 1.0
2 0.0 3.0 4.0
3 0.0 0.0 0.0
推荐阅读
- java - 当我运行此代码时,它只是在播放音频时冻结。但是,我希望动画与音频同时运行。我怎样才能做到这一点?
- python - 如何使用 python 将文本行转换为 HTML 链接?
- bash - 在 SFTP bash 脚本中更正正则表达式
- html - 如何删除进度 HTML 元素的边框?
- c# - C# 使用 oledb 从任务返回值
- java - 如何修复 sbt 项目中的 scala.tools.nsc.typechecker.Contexts$Context.imports(Contexts.scala:232)?
- matlab - 创建具有系数和可变数量条目的二维余弦波矩阵
- java - 为什么我不能在 jpanel 上创建形状?
- android - 如何获取 android NDK 详细崩溃报告?
- excel - 是否有一种速记方法可以将一系列单元格与单个值进行比较?