python - pandas 通过非 nan 值之前和之后填充 nans

标签 python pandas

我想用相邻元素的平均值填充 dfnan

考虑一个数据框:

df = pd.DataFrame({'val': [1,np.nan, 4, 5, np.nan, 10, 1,2,5, np.nan, np.nan, 9]})
    val
0   1.0
1   NaN
2   4.0
3   5.0
4   NaN
5   10.0
6   1.0
7   2.0
8   5.0
9   NaN
10  NaN
11  9.0

我想要的输出是:

    val
0   1.0
1   2.5
2   4.0
3   5.0
4   7.5
5   10.0
6   1.0
7   2.0
8   5.0
9   7.0 <<< deadend
10  7.0 <<< deadend
11  9.0

我研究了其他解决方案,例如 Fill cell containing NaN with average of value before and after ,但在两个或多个连续 np.nan 的情况下这将不起作用。

非常感谢任何帮助!

最佳答案

使用 ffill + bfill并除以 2:

df = (df.ffill()+df.bfill())/2

print(df)
     val
0    1.0
1    2.5
2    4.0
3    5.0
4    7.5
5   10.0
6    1.0
7    2.0
8    5.0
9    7.0
10   7.0
11   9.0

编辑:如果第一个和最后一个元素包含 NaN 然后使用 (Dark 建议):

df = pd.DataFrame({'val':[np.nan,1,np.nan, 4, 5, np.nan, 
                          10, 1,2,5, np.nan, np.nan, 9,np.nan,]})
df = (df.ffill()+df.bfill())/2
df = df.bfill().ffill()

print(df)
     val
0    1.0
1    1.0
2    2.5
3    4.0
4    5.0
5    7.5
6   10.0
7    1.0
8    2.0
9    5.0
10   7.0
11   7.0
12   9.0
13   9.0

关于python - pandas 通过非 nan 值之前和之后填充 nans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54414269/

相关文章:

python - 如何同时执行两个 “aggregate”函数(例如sum),并从同一个迭代器中提供它们?

python - OpenCV 卡尔曼滤波器 w/python 的实际实现?

python - 将 Flightradar24 API 转换为 pandas 数据帧

python - 迭代 pandas 数据框时的不同值

python - 加快 Pandas 应用功能

python - 如何使用 matplotlib 定义图中子图的尺寸(以英寸为单位)?

python - django 在 syncdb 时不加载初始固定装置

python - 在 stani python 编辑器中运行代码的性能与 IDLE/terminal/gvim 的对比

python - 循环遍历数据框字典

python - bool 索引 pandas 中的 DataFrame 并用条件为 True 的 Series 的元素替换列