You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame排除最后一行执行ffill填充空值的实现方法

问题描述

假设我有如下pandas DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [np.nan, 5, 2, np.nan, 3], 'B': [np.nan, 4, np.nan, 5, np.nan], 'C': [np.nan, 4, 3, 2, 1]})

原始df内容:

A    B    C
0  NaN  NaN  NaN
1  5.0  4.0  4.0
2  2.0  NaN  3.0
3  NaN  5.0  2.0
4  3.0  NaN  1.0

需求是对除最后一行之外的所有行执行ffill方式的空值填充,预期输出如下:

A    B    C
0  NaN  NaN  NaN
1  5.0  4.0  4.0
2  2.0  4.0  3.0
3  2.0  5.0  2.0
4  3.0  NaN  1.0

原有尝试代码无法得到正确结果:

df.drop(df.tail(1).index).fillna(method="ffill",inplace=True)
原因分析

原有写法的问题在于,df.drop(df.tail(1).index) 会生成一个独立于原df的临时新对象,对这个临时对象执行inplace=True操作只会修改临时对象,完全不会影响原df,自然拿不到预期结果。

解决方案

直接对除最后一行外的切片做填充后赋值回原df对应位置即可,实现代码如下:

df.iloc[:-1] = df.iloc[:-1].fillna(method='ffill')

运行上述代码后,df就会和给出的预期输出完全一致。

内容的提问来源于stack exchange,提问作者younggotti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:18:02