填充 DataFrame 中空值列:使用父键映射回填数值
发布时间 - 2026-02-02 00:00:00 点击率:次本文介绍如何在 pandas 中高效地将某列中的缺失值(none/nan)替换为对应“父键”所在行的指定字段值,核心方法是构建键值映射字典并结合 `map` 与 `fillna` 实现链式回填。
在数据处理中,常遇到具有层级关系的表格结构——例如某行通过 Parent 字段引用另一行的 Key,当本行 Value 缺失时,需自动继承其父行的 Value 值。这种“基于主键的跨行回填”不能依赖简单前向/后向填充(ffill/bfill),而应建立精准的键值映射。
实现的关键步骤如下:
构建映射字典:以 Key 列为键、Value 列为值,生成 dict(df[['Key', 'Value']].values)。注意:若存在重复 Key,后者会覆盖前者;如需保留首次出现值,可改用 df.drop_duplicates('Key', keep='first').set_index('Key')['Value'].to_dict()。
映射父键并回填:对 Parent 列调用 .map(m),将每个父键尝试查找对应 Value;再用 .fillna() 将原 Value 中的缺失值替换为映射结果。该操作天然支持“未匹配父键 → 保持 None”。
完整示例代码如下:
import pandas as pd import numpy as np # 构造示例数据 data = [['Key1', 'Key10', 246], ['Key2', 'Key1', None], ['Key3', 'Key14', "434"]] df = pd.DataFrame(data, columns=['Key', 'Parent', 'Value']) # 步骤1:构建 Key → Value 映射字典 mapping = dict(df[['Key', 'Value']].values) # 步骤2:用 Parent 查找对应 Value,并填充原 Value 中的缺失值 df['Value'] = df['Value'].fillna(df['Parent'].map(mapping)) print(df)
输出结果:
Key Parent Value 0 Key1 Key10 246 1 Key2 Key1 246 2 Key3 Key14 434
✅ 注意事项:
- map() 对未命中键默认返回 NaN,恰好与 fillna() 协同,无需额外处理;
- 若 Value 列含字符串 "None" 或空字符串等非 None/np.nan 的“逻辑空值”,需先统一转换:df['Value'] = df['Value'].replace(
['', 'None', 'null'], np.nan);
- 该方法支持多层间接引用(如 Key2 → Key1 → Key10),但仅限单层映射;如需递归解析(即 Key2 指向 Key1,而 Key1 的 Value 本身也为 None 且需继续向上查 Key10),则需改用 networkx 构建有向图或编写迭代/递归函数。
此方案简洁、向量化、性能优异,是解决“父键回填”类问题的标准实践。
# app
# 递归函数
# pandas
# NULL
# 字符串
# 递归
# 继承
# map
# 链式
# 如需
# 键值
# 首次
# 数据处理
# 也为
# 再用
# 仅限
# 其父
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Python文件操作最佳实践_稳定性说明【指导】
如何在Windows服务器上快速搭建网站?
网站制作报价单模板图片,小松挖机官方网站报价?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
网站制作软件有哪些,制图软件有哪些?
如何用5美元大硬盘VPS安全高效搭建个人网站?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
无锡营销型网站制作公司,无锡网选车牌流程?
Python文件流缓冲机制_IO性能解析【教程】
如何快速搭建高效简练网站?
如何登录建站主机?访问步骤全解析
如何快速搭建支持数据库操作的智能建站平台?
如何用y主机助手快速搭建网站?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
如何在云指建站中生成FTP站点?
晋江文学城电脑版官网 晋江文学城网页版直接进入
如何在 React 中条件性地遍历数组并渲染元素
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
黑客入侵网站服务器的常见手法有哪些?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
详解CentOS6.5 安装 MySQL5.1.71的方法
如何用AWS免费套餐快速搭建高效网站?
Python进程池调度策略_任务分发说明【指导】
如何制作一个表白网站视频,关于勇敢表白的小标题?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
jQuery 常见小例汇总
手机软键盘弹出时影响布局的解决方法
js实现点击每个li节点,都弹出其文本值及修改
如何用免费手机建站系统零基础打造专业网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
香港服务器租用费用高吗?如何避免常见误区?
Laravel中的Facade(门面)到底是什么原理
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
IOS倒计时设置UIButton标题title的抖动问题
文字头像制作网站推荐软件,醒图能自动配文字吗?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何快速建站并高效导出源代码?
iOS正则表达式验证手机号、邮箱、身份证号等


