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

如何在Pandas DataFrame中按列匹配替换指定字符串子串

解决方案:逐行自定义字符串替换

这事儿其实用Pandas的apply就能轻松搞定,刚好能适配你每行不同的替换规则,还能处理空值的情况。我给你捋捋具体怎么做:

1. 先构造示例DataFrame(和你的场景一致)

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'main_string': [
        'Hello My Name is XXX',
        'Hello My name is YYY',
        'Hello my Name is Rob',
        'Hello My name is ZZZ'
    ],
    'target': ['XXX', 'YYY', np.nan, 'ZZZ'],
    'replacement': ['John', 'Mary', None, 'Kate']
})

2. 自定义替换函数并生成结果列

我们写一个逐行处理的函数,专门处理空值和替换逻辑:

def replace_target(row):
    # 如果target是空值(NaN),直接返回原字符串
    if pd.isna(row['target']):
        return row['main_string']
    # 否则把main_string里的target子串替换成replacement
    return row['main_string'].replace(row['target'], row['replacement'])

# 生成新的result列
df['result'] = df.apply(replace_target, axis=1)

3. 查看输出结果

运行后你就能得到想要的结果:

print(df['result'])

输出内容:

0 Hello My Name is John
1 Hello My name is Mary
2 Hello my Name is Rob
3 Hello My name is Kate
Name: result, dtype: object

简洁版:用lambda表达式简化代码

如果觉得写单独函数麻烦,也可以用一行lambda表达式搞定,逻辑是一样的:

df['result'] = df.apply(
    lambda row: row['main_string'].replace(row['target'], row['replacement']) 
    if not pd.isna(row['target']) 
    else row['main_string'],
    axis=1
)

补充说明

这个方法的核心是逐行处理,所以不管你的target和replacement每行怎么变都能适配,而且专门处理了target为NaN的边界情况——这种时候不会执行替换,直接保留原字符串,完美匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:58:11