如何用另一列值替换匹配字符串?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)
对应数据表格:
| trademarkname | tm_value | DESCRIPTION_TEXT | Compare |
|---|---|---|---|
| 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
相关产品推荐
相关产品推荐

