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

如何用另一DataFrame的字符串替换pandas列中的指定子串?

解决Pandas中基于映射表的子串批量替换问题

核心思路

要实现用df2的映射关系替换df1中Long_string列的指定子串,关键是先把映射表转换成键值对字典,再利用Pandas的str.replace()方法批量替换所有匹配的子串(注意设置精确匹配避免误替换)。

完整代码实现

import pandas as pd

# 初始化原始数据
data={"ID": ["zx125", "zx137", "zx897", "zx567", "zx694"],"Long_string": ["TM~AA~Loc1::MH~CC~Loc1::LH~BF~Loc2::CM~CD~Loc2::CH~CD~Loc2", "MH~BGG~Loc1::LH~BF~Loc2::CM~RR~Loc2", "TM~VD~Loc1::MH~EC~Loc1::LH~BF~Loc2", "MH~BF~Loc1::LH~BF~Loc2::CH~CD~Loc2","DF~VD~Loc3::MH~EC~Loc1::LH~BF~Loc2::CH~CD~Loc2"]}
df1 = pd.DataFrame(data)

# 初始化映射表
mapping = {"Before Mapping": ["MH~CC~Loc1", "LH~BF~Loc2", "CH~CD~Loc2"],"After Mapping": ["MH~RT~Loc1","LH~BE~Loc2","CH~CE~Loc2"]}
df2 = pd.DataFrame(mapping)

# 将映射表转换为替换字典
replace_mapping = dict(zip(df2["Before Mapping"], df2["After Mapping"]))

# 批量替换子串,生成New_string列
# regex=False确保是精确匹配子串,而非正则表达式匹配
df1["New_string"] = df1["Long_string"].str.replace(replace_mapping, regex=False)

# 查看结果
print(df1)

关键细节说明

  1. 字典转换:用zip()把df2的两列配对,生成{待替换子串: 替换后子串}的字典,方便批量操作。
  2. str.replace()的参数:
    • 直接传入字典可一次性处理所有映射关系,无需循环遍历。
    • 设置regex=False是为了避免把待替换子串中的特殊字符(如~)当作正则表达式语法,确保精确匹配完整子串,防止误替换类似结构的其他内容。

输出结果验证

运行代码后,New_string列会按映射规则完成替换:

  • 原MH~CC~Loc1替换为MH~RT~Loc1
  • 原LH~BF~Loc2替换为LH~BE~Loc2
  • 原CH~CD~Loc2替换为CH~CE~Loc2
    所有匹配的子串都会被替换,其他内容保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:16:03