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

