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
相关产品推荐
相关产品推荐

