Pandas如何通过关联另一张DataFrame填充指定列的NaN缺失值
Pandas 跨表填充缺失值实现方案
这里提供两种常用实现方式,都可以避免维度不匹配的报错:
方案1:map+fillna 组合(更简洁,无多余列产生)
先把映射表转成ID到Val的索引结构,再直接对目标表的缺失值做匹配填充:
import pandas as pd # 假设你的映射表名为 df_map,目标表名为 df_target # 构建ID-Val映射关系 id_val_mapper = df_map.set_index("ID")["Val"] # 匹配ID填充缺失值 df_target["Val"] = df_target["Val"].fillna(df_target["ID"].map(id_val_mapper))
如果你的预期输出里ID3的Val需要保留NaN,只需加一行过滤逻辑即可,比如只填充ID<=2的缺失值。
方案2:左连接实现类join关联填充
如果你需要用显式的关联操作实现,可以用左连接的方式:
# 按ID左连接两个表,给映射表的Val列加后缀避免重名 df_merged = df_target.merge(df_map, on="ID", how="left", suffixes=("", "_map")) # 用关联得到的Val_map列填充原Val列的缺失值 df_merged["Val"] = df_merged["Val"].fillna(df_merged["Val_map"]) # 删除多余的辅助列得到最终结果 df_result = df_merged.drop(columns=["Val_map"])
报错原因说明
你之前出现维度不匹配报错,通常是因为直接把映射表的Val列整体赋值给目标表的缺失值位置,两个表行数、行顺序都不一致才会触发错误。上述两种方案都会自动按ID对齐数据,不需要手动匹配维度。
内容的提问来源于stack exchange,提问作者lte__
相关产品推荐
相关产品推荐

