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

