如何在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
相关产品推荐
相关产品推荐

