如何为Pandas DataFrame特定行按不同策略填充缺失值?
分区域填充DataFrame缺失值的实现方案
不需要循环处理行,直接通过iloc切片定位不同行区域,结合对应的填充方法即可实现,以下是具体逻辑和代码:
关键语法纠正
你之前用df.iloc(1:1000)是错误的,Pandas中iloc的切片语法是方括号[],正确的前1000行切片是df.iloc[:1000](Pandas索引从0开始,[:1000]对应第0到999行,共1000行)。
分步实现逻辑
前1000行:均值填充
- 计算前1000行每列的均值(仅基于该区域的非缺失值计算)
- 用该均值填充对应区域的缺失值,最后赋值回原DataFrame的对应位置
# 计算前1000行的列均值 top_mean = df.iloc[:1000].mean() # 填充并赋值 df.iloc[:1000] = df.iloc[:1000].fillna(top_mean)中间1000行:ffill填充
- 定位第1000到1999行(
iloc[1000:2000]) - 使用
ffill()(前向填充,用前一行的非缺失值填充当前空值),指定按行方向填充(axis=0)
# 前向填充中间区域并赋值 df.iloc[1000:2000] = df.iloc[1000:2000].ffill(axis=0)- 定位第1000到1999行(
最后500行:bfill填充
- 定位第2000到2499行(
iloc[2000:]) - 使用
bfill()(后向填充,用后一行的非缺失值填充当前空值)
# 后向填充末尾区域并赋值 df.iloc[2000:] = df.iloc[2000:].bfill(axis=0)- 定位第2000到2499行(
完整代码示例
# 假设你的DataFrame名为df # 处理前1000行 top_mean = df.iloc[:1000].mean() df.iloc[:1000] = df.iloc[:1000].fillna(top_mean) # 处理中间1000行 df.iloc[1000:2000] = df.iloc[1000:2000].ffill(axis=0) # 处理最后500行 df.iloc[2000:] = df.iloc[2000:].bfill(axis=0)
内容的提问来源于stack exchange,提问作者Marharyta Kalynchuk
相关产品推荐
相关产品推荐

