Python如何用上下相邻行均值填充pandas数据框缺失值
pandas DataFrame中将"-"替换为上下相邻行均值的实现方案
实现步骤
- 第一步:将占位符"-"转换为pandas可识别的空值
因为"-"是字符串格式,无法直接参与数值计算,首先要把所有目标位置的"-"替换为np.nan,同时确保对应列是数值类型:import pandas as pd import numpy as np # 全表替换的写法 df = df.replace('-', np.nan) # 如果仅需要处理指定列,用下面的写法,替换列名列表即可 # target_cols = ['列1', '列2', '列3'] # df[target_cols] = df[target_cols].replace('-', np.nan).astype(float) - 第二步:按上下相邻值均值填充空值
pandas自带的线性插值方法刚好匹配「取上下相邻有效值均值填充」的需求,根据你的数据场景选对应写法即可:# 场景1:所有"-"都是孤立存在(不会连续出现2个及以上的"-"),直接插值即可 df = df.interpolate(method='linear', limit_direction='both') # 场景2:存在连续"-",仅给上下都有有效值的单个"-"填均值,连续"-"保留为空,加limit=1限制 df = df.interpolate(method='linear', limit=1, limit_direction='both')
注意事项
- 首尾行如果是"-",因为缺少上方/下方的相邻值,上述方法默认不会填充这部分内容,如果需要处理首尾空值,可以额外搭配
ffill()(用上值填充)或bfill()(用下值填充)补全 - 插值前务必确认目标列已经转为数值类型,否则会触发类型报错
- 简单效果验证:某列原值为
[4, '-', 8],经过上述处理后中间值会被填充为(4+8)/2=6,完全符合预期
内容的提问来源于stack exchange,提问作者Tahnee
相关产品推荐
相关产品推荐

