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

如何用另一列值替换匹配字符串?Python数据处理求助

实现指定列的字符串替换需求

需求说明

需要将DESCRIPTION_TEXT列中匹配到对应行trademarkname的字符串,替换为该行的tm_value,不修改其他内容。示例如下:
输入文本:

My name is GaryBrooks. 
The Partnertime series was good.

需要匹配的字符串:

GaryBrooks
Partner time

期望输出:

My name is [TM="GaryBrooks"].
The [TM="Partner time"] series was good.

已完成操作

已经通过apply函数生成Compare列,标记每行是否存在匹配:

file['Compare'] = file.apply(lambda x: 'Yes' if x['trademarkname'] in x['DESCRIPTION_TEXT'] else 'No', axis=1)

对应数据表格:

trademarknametm_valueDESCRIPTION_TEXTCompare
GaryBrooks[TM="GaryBrooks"]My name is GaryBrooks.yes
Partner time[TM="Partner time"]The Partnertime series was good.yes

替换实现方法

方法1:直接字符串替换(简单场景)

针对已经标记为Yes的行,直接用str.replace完成替换,逻辑清晰适合基础匹配需求:

def replace_trademark(row):
    if row['Compare'] == 'Yes':
        return row['DESCRIPTION_TEXT'].replace(row['trademarkname'], row['tm_value'])
    return row['DESCRIPTION_TEXT']

# 覆盖原列或生成新列,这里选择覆盖原列
file['DESCRIPTION_TEXT'] = file.apply(replace_trademark, axis=1)

方法2:正则替换(复杂匹配场景)

如果需要处理特殊字符、精确单词匹配等复杂情况,用正则替换更稳妥,re.escape能避免特殊字符干扰匹配:

import re

def replace_trademark_regex(row):
    if row['Compare'] == 'Yes':
        # 用re.escape转义特殊字符,确保完全匹配原字符串
        pattern = re.compile(re.escape(row['trademarkname']))
        return pattern.sub(row['tm_value'], row['DESCRIPTION_TEXT'])
    return row['DESCRIPTION_TEXT']

file['DESCRIPTION_TEXT'] = file.apply(replace_trademark_regex, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:18:23