线性插值填充GDP人均数据缺失值失效,请求排查代码问题
问题排查与修正
原代码的核心问题
- 缩进错误:Python对缩进敏感,你代码里
for循环、missing_values定义等的缩进层级混乱,会直接导致逻辑执行错误(比如变量作用域异常)。 - 插值对象错误:你单独提取了含缺失值的子序列做插值,但线性插值需要依赖缺失值前后的有效数据点才能计算,单独对缺失值行的序列插值,结果还是NaN,根本无法填充。
- 更新方式无效:即便插值有结果,
df.update(filled_values)也无法正确映射回原数据框,因为你没有保留原分组的索引关联。
修正后的代码
直接对每个国家的完整序列执行线性插值,再映射回原数据框:
# 按Country分组,对每个组的"GDP percapita"列执行线性插值 df["GDP percapita"] = df.groupby("Country")["GDP percapita"].transform(lambda x: x.interpolate(method="linear"))
或者采用更直观的分步写法:
filled_groups = [] for country, group in df.groupby("Country"): # 对当前国家的完整序列做线性插值 group["GDP percapita"] = group["GDP percapita"].interpolate(method="linear") filled_groups.append(group) # 合并所有分组得到填充后的数据集,恢复原索引顺序 df = pd.concat(filled_groups).sort_index()
关键说明
transform方法会自动将分组插值后的结果对应到原数据框的位置,无需手动处理索引匹配。- 线性插值默认按行的顺序计算(假设你的数据是按时间/年份排序的),能有效保留数据趋势。如果数据未按时间排序,需先对每个国家的子序列按时间列排序后再执行插值。
内容的提问来源于stack exchange,提问作者Niamh
相关产品推荐
相关产品推荐

