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

如何在Python中利用DataFrame批量替换文本中的指定字符串

使用参考DataFrame批量替换目标DataFrame文本列内容

步骤1:准备示例数据

先模拟你提到的参考DataFrame和目标DataFrame:

import pandas as pd

# 参考DataFrame(含重复值)
ref_df = pd.DataFrame({
    'str1': ['苹果', '香蕉', '橘子', '苹果'],
    'str2': ['红苹果', '黄香蕉', '橙子', '青苹果'],
    'to_be_replaced': ['APPLE', 'BANANA', 'ORANGE', 'GREEN_APPLE']
})

# 目标DataFrame
target_df = pd.DataFrame({
    'text': ['我喜欢吃苹果和红苹果', '香蕉比黄香蕉甜', '橘子和橙子都不错']
})

步骤2:构建替换映射字典

将参考DataFrame中str1、str2列的所有字符串与对应的to_be_replaced值关联,同时处理重复键(默认保留最后出现的替换值,可根据需求调整):

# 把str1和str2列转成映射Series,再合并为字典
s1 = ref_df.set_index('str1')['to_be_replaced']
s2 = ref_df.set_index('str2')['to_be_replaced']
replace_dict = pd.concat([s1, s2]).to_dict()

# 若需要保留第一个出现的替换值,可先去重再构建字典
# ref_unique = ref_df.drop_duplicates(subset=['str1', 'str2'], keep='first')
# s1_unique = ref_unique.set_index('str1')['to_be_replaced']
# s2_unique = ref_unique.set_index('str2')['to_be_replaced']
# replace_dict = pd.concat([s1_unique, s2_unique]).to_dict()

步骤3:批量替换目标文本列

利用正则表达式匹配所有需要替换的字符串,批量替换为对应值:

import re

# 转义字典中的特殊字符,避免正则匹配出错
pattern = re.compile('|'.join(re.escape(key) for key in replace_dict.keys()))

# 执行替换
target_df['text'] = target_df['text'].str.replace(pattern, lambda x: replace_dict[x.group()])

替换结果

处理后target_df的内容为:

text
我喜欢吃APPLE和GREEN_APPLE
BANANA比BANANA甜
ORANGE和ORANGE都不错

额外说明

如果需要更灵活地处理重复映射(比如同一字符串对应不同替换值时自定义优先级),可以先将参考DataFrame的str1和str2列合并为单列,再去重:

# 宽表转长表,统一处理原始字符串
ref_melt = ref_df.melt(id_vars='to_be_replaced', value_vars=['str1', 'str2'], value_name='original_str')
# 按原始字符串去重,保留最后出现的替换值
ref_melt_unique = ref_melt.drop_duplicates(subset='original_str', keep='last')
replace_dict = ref_melt_unique.set_index('original_str')['to_be_replaced'].to_dict()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:03:19