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

Python处理纵向健康指标数据集的NaN值填充方案咨询

WHO健康指标数据集缺失值填充方案

1. 按国家对应时间范围均值填充

该方案实现简单,适合不需要保留时序特征的分析场景,基于pandas实现代码如下:

import pandas as pd

# 读取本地数据集
df = pd.read_csv("life_expectancy_who.csv")

# 定义需要填充的数值字段列表
numeric_cols = ["GDP", "Life expectancy", "Adult Mortality", "Alcohol", "BMI"]

# 按国家分组,用对应国家该字段2000-2015年的均值替换NaN
df[numeric_cols] = df.groupby("Country")[numeric_cols].transform(
    lambda col: col.fillna(col.mean())
)

特殊情况处理:若某国家对应字段全为缺失值,填充后仍会保留NaN,可后续补充全局均值填充或剔除对应国家记录

2. 保留时序特征的填充方案

针对面板纵向数据,优先使用按国家分组的时序插值方案,能最大程度保留各国指标随时间的变化趋势:

2.1 线性插值(通用场景首选)

假设指标随时间呈线性变化,用缺失值前后的有效值做线性拟合填充,实现成本低、效果稳定:

# 第一步:按国家、年份升序排序,保证时序顺序正确
df = df.sort_values(["Country", "Year"], ignore_index=True)

# 第二步:按国家分组做线性插值,前后缺失的部分向两侧延伸填充
df[numeric_cols] = df.groupby("Country")[numeric_cols].transform(
    lambda col: col.interpolate(method="linear", limit_direction="both")
)

2.2 时间加权插值(时序敏感度高的场景)

针对GDP、预期寿命这类随时间变化速率有明显波动的指标,使用时间加权插值结果更贴合实际变化规律:

# 将年份设为索引以启用时间插值方法
df = df.set_index("Year", drop=False)
df[numeric_cols] = df.groupby("Country")[numeric_cols].transform(
    lambda col: col.interpolate(method="time", limit_direction="both")
)
# 恢复原数据结构
df = df.reset_index(drop=True)

2.3 滚动均值填充(需保留短期波动特征的场景)

如果分析需要保留指标的短期波动特性,可使用3-5年窗口的滚动均值做填充:

df = df.sort_values(["Country", "Year"], ignore_index=True)
df[numeric_cols] = df.groupby("Country")[numeric_cols].transform(
    lambda col: col.fillna(col.rolling(window=3, min_periods=1).mean())
)

注意:所有时序类填充方案必须先完成数据按国家、年份的排序操作,否则插值结果会出现逻辑错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:09:03