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

在Pandas DataFrame中替换含特殊字符的字符串

Pandas DataFrame特殊字符字符串替换失败的解决办法

你的代码有两个关键问题导致替换没生效:

  • 变量名不匹配:你定义的替换列表是old_values和new_values,但替换时写的是old_values_sign和new_values_sign,变量名错误导致替换逻辑根本没执行。
  • 正则特殊字符未转义:$和{是正则表达式的特殊元字符($匹配行尾,{}用于限定重复次数),直接作为匹配值会被正则引擎解析成语法,无法匹配到字符串里的${z_mask0}这类内容,必须转义这些特殊字符。

下面是修正后的两种可行方案:

方案一:手动转义特殊字符

import pandas as pd

data = {'col1': ["series ${z_mask0}", "series ${z_mask1}", "series ${z_mask2}"]}
df = pd.DataFrame(data)

# 修正变量名,同时手动转义正则特殊字符(用r前缀表示原始字符串)
old_values = [r"\$\{z_mask0\}", r"\$\{z_mask1\}", r"\$\{z_mask2\}"]
new_values = ["${z_00}", "${z_01}", "${z_02}"]

# 构建替换映射字典,执行替换
replace_map = dict(zip(old_values, new_values))
df['col1'] = df['col1'].replace(replace_map, regex=True)

print(df)

方案二:用re.escape()自动转义(更便捷)

如果需要替换的内容很多,手动转义太麻烦,可以用re.escape()自动处理所有正则特殊字符:

import pandas as pd
import re

data = {'col1': ["series ${z_mask0}", "series ${z_mask1}", "series ${z_mask2}"]}
df = pd.DataFrame(data)

old_values = ["${z_mask0}", "${z_mask1}", "${z_mask2}"]
new_values = ["${z_00}", "${z_01}", "${z_02}"]

# 自动转义每个旧值中的正则特殊字符
escaped_old = [re.escape(val) for val in old_values]
replace_map = dict(zip(escaped_old, new_values))

df['col1'] = df['col1'].replace(replace_map, regex=True)

print(df)

运行任意一种方案后,都会得到你预期的输出:

col1
0  series ${z_00}
1  series ${z_01}
2  series ${z_02}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:55:28