如何在pandas中使用另一列作为匹配模式执行字符串替换
报错原因
Series.str.replace() 方法的第一个参数要求传入单个字符串/正则表达式对象,不支持直接传入Series作为每行的匹配规则,因此会触发类型错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
解决方案
方案1:按行apply(写法简洁)
通过指定axis=1对每行数据执行自定义替换逻辑,写法如下:
import pandas as pd df = pd.DataFrame({'str1': ['abc','abcd','def'], 'str2': ['b','ab', 'ef']}) df['str1_replaced'] = df.apply(lambda x: x['str1'].replace(x['str2'], ''), axis=1)
如果你的str2列存在.、*这类正则特殊字符,不需要当作正则匹配时,可以显式指定regex=False避免意外解析。
方案2:列表推导式(性能更优)
对于数据量较大的场景,列表推导式的执行效率比apply更高,写法如下:
df['str1_replaced'] = [s1.replace(s2, '') for s1, s2 in zip(df['str1'], df['str2'])]
两种方案的输出结果均符合预期:
str1 str2 str1_replaced 0 abc b ac 1 abcd ab cd 2 def ef d
内容的提问来源于stack exchange,提问作者fmarm
相关产品推荐
相关产品推荐

