如何在pandas中使用前后非nan值的平均值填充列中的nan值
实现方法
你可以结合pandas的前向填充ffill()和后向填充bfill()方法实现需求,核心逻辑是先分别取每个空值对应的最近前序非空值、最近后序非空值,再对两者取平均即可。
完整示例代码
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({'Column A': [5, np.nan, np.nan, 15]}) # 指定需要处理的列 target_col = 'Column A' # 核心填充逻辑 df[target_col] = (df[target_col].ffill() + df[target_col].bfill()) / 2 print(df)
输出结果
Column A 0 5.0 1 10.0 2 10.0 3 15.0
额外说明
如果你的数据存在列开头就有空值或者列结尾有空值的情况,这部分空值会因为不存在前序/后序非空值导致计算后还是空值,你可以根据自己的需求补充额外的填充规则,比如开头空值直接用最近的后序非空值填充、结尾空值直接用最近的前序非空值填充,只需要在核心逻辑后面追加fillna步骤即可:
df[target_col] = df[target_col].fillna(df[target_col].bfill()).fillna(df[target_col].ffill())
内容的提问来源于stack exchange,提问作者MathBeginner_
相关产品推荐
相关产品推荐

