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

如何用Pandas按Key匹配查找表替换DataFrame中的空值与NaN值

基于查找表替换DataFrame空值的实现方法

左合并出现多余行的核心原因是lookupDF中存在重复的Key值,合并时会触发笛卡尔积生成重复行,优先推荐更高效、不会变更原df行数的映射替换方案:

方案1:字典映射法(推荐,性能最优)

该方法通过构造Key到Name的映射字典,直接按行匹配替换,时间复杂度为O(n),n为df的行数,完全不受lookupDF规模影响。
实现代码:

import pandas as pd

# 第一步:构造查找映射字典,提前对lookupDF按Key去重避免映射冲突
name_map = lookupDF.drop_duplicates(subset='Key', keep='last').set_index('Key')['Name'].to_dict()

# 第二步:替换空值,若空值为NaN则将条件改为df['Name'].isna()
df['Name'] = df['Name'].mask(df['Name'] == '', df['Key'].map(name_map))

方案2:去重后左合并(适合需要关联更多lookup字段的场景)

如果需要同时关联lookupDF的多个字段,可先对lookupDF去重再合并,避免生成多余行:
实现代码:

# 第一步:对lookupDF按Key去重,保证每个Key仅对应一行
lookup_unique = lookupDF.drop_duplicates(subset='Key', keep='first')

# 第二步:左连接关联Name字段,用后缀区分原字段和lookup字段
df_merged = df.merge(lookup_unique[['Key', 'Name']], on='Key', how='left', suffixes=('', '_lookup'))

# 第三步:替换空值后删除多余字段
df_merged['Name'] = df_merged['Name'].mask(df_merged['Name'] == '', df_merged['Name_lookup'])
df = df_merged.drop(columns=['Name_lookup'])

注意事项

  • 若df中存在lookupDF没有的Key,映射后会返回NaN,原有空值不会被覆盖,符合业务逻辑
  • 两种方案均不会改变原df的行数,也不会受lookupDF规模大于df的影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:24:02