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

合并DataFrame后,如何将指定列的指定值替换为同名列非指定值

Pandas实现指定值替换与合并的解决方案

需求概述

现有两个字典数据:

import pandas as pd

dc1 = {
    'n':[1, 2, 3, 4],
    'a':[0, 2, 0.0, 4],
    'b':[0,'', False, 5],
}

dc2 = {
    'n':[1, 2, 3, 4],
    'a':[1, 0, 3, 0.0],
    'b':[6, 5, 8, 9],
}

需要完成以下操作:

  • 将字典转为DataFrame并按n列合并
  • 把df1中a、b列的指定值([False, 0, 0.0, 'Nan', None, '', 'Null'])替换为df2对应列的数值
  • 删除合并后多余的列,最终得到目标字典:
dc_result = {
    'n':[1, 2, 3, 4],
    'a':[1, 2, 3, 4],
    'b':[6, 5, 8, 5],
}

实现代码与解释

步骤1:转换并合并DataFrame

先将两个字典转为DataFrame,然后通过merge方法按n列做内连接,给df2的列添加后缀区分:

import pandas as pd

# 定义原始字典
dc1 = {
    'n':[1, 2, 3, 4],
    'a':[0, 2, 0.0, 4],
    'b':[0,'', False, 5],
}

dc2 = {
    'n':[1, 2, 3, 4],
    'a':[1, 0, 3, 0.0],
    'b':[6, 5, 8, 9],
}

# 转换为DataFrame
df1 = pd.DataFrame(dc1)
df2 = pd.DataFrame(dc2)

# 按n列合并,为dc2的列添加后缀
merged_df = pd.merge(df1, df2, on='n', suffixes=('', '_dc2'))

步骤2:替换指定值

先定义需要替换的数值集合(用集合查询效率更高),然后对a、b列批量处理:当df1的列值属于替换集合时,用df2对应列的值替换:

# 定义需要替换的目标值集合
replace_values = {False, 0, 0.0, 'Nan', None, '', 'Null'}

# 批量处理a、b列
for col in ['a', 'b']:
    merged_df[col] = merged_df[col].mask(merged_df[col].isin(replace_values), merged_df[f'{col}_dc2'])

这里用mask方法可以简洁地实现“满足条件则替换”的逻辑,比apply更高效。

步骤3:清理列并转换为字典

删除合并后带后缀的多余列,再将结果DataFrame转换为字典格式:

# 删除dc2来源的列
merged_df = merged_df.drop(columns=['a_dc2', 'b_dc2'])

# 转换为目标字典
dc_result = merged_df.to_dict('list')

# 验证结果
print(dc_result)

运行以上代码后,输出结果完全匹配需求中的dc_result。

内容的提问来源于stack exchange,提问作者Константин Прудников

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:10:26