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

如何基于字典列表匹配填充Pandas DataFrame的空缺列值

Pandas 多键匹配填充DataFrame空缺值解决方案

原代码错误原因

  • 调用DataFrame.to_dict()时未指定orient参数,默认返回{列名: {行索引: 对应值}}的列导向字典,并非预期的逐行记录列表,遍历过程中取row['name']会直接报错。
  • 即使通过to_dict('records')得到行字典列表,修改字典也不会同步更新原DataFrame,且循环匹配的方式在数据量较大时效率极低,不符合Pandas的向量化处理逻辑。

正确实现代码

import pandas as pd

# 原始数据
list_validation = [
    {'name': 'Alice', 'street': 'Baker Street', 'stamp': 'T05', 'city': 'London'},
    {'name': 'Margaret', 'street': 'Castle Street', 'stamp': 'T01', 'city': 'Cambridge'},
    {'name': 'Fred', 'street': 'Baker Street', 'stamp': 'T012', 'city': 'London'}
]
df = pd.DataFrame({
    'name': ['Fred', 'Jane', 'Alice', 'Margaret'],
    'street': ['Baker Street', 'Downing Street', 'Baker Street', 'Castle Street'],
    'stamp': ['', 'T03', '', ''],
    'city': ['', 'London', '', ''],
    'other irrelevant columns for this task' : [1, 2, 3, 4]
})

# 1. 将验证字典列表转为DataFrame,设置匹配键为索引
df_val = pd.DataFrame(list_validation).set_index(['name', 'street'])
# 2. 原df空字符串转NA方便填充,同时设置相同的匹配索引
df = df.replace({'': pd.NA}).set_index(['name', 'street'])
# 3. 按索引匹配填充空缺,优先保留原df已有的非空值
df[['stamp', 'city']] = df[['stamp', 'city']].fillna(df_val)
# 4. 重置索引恢复原结构,剩余空缺转回空字符串
df = df.reset_index().fillna('')

运行后得到的df即为符合需求的结果:原有的非空值(如Jane的stamp=T03、city=London)会完整保留,匹配成功的空缺值会被list_validation的对应数据填充,未匹配到的空缺保持为空。
注:你给出的预期结果中Margaret的street字段为手误,原始df中该值为Castle Street,匹配后stamp为T01、city为Cambridge,符合逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:02