为何pandas的str.replace无法替换DataFrame中带括号的指定子字符串
问题原因
pandas 的 Series.str.replace() 方法默认启用正则匹配模式,你需要替换的字符串中包含的(、)属于正则表达式的元字符,会被识别为分组标记,而非普通的字面量字符。因此Conference Call - F(2).rtf、Final(2).rtf这两个带括号的字符串无法被正常匹配,只有无特殊元字符的Conference Call - Final.rtf能匹配成功。
解决方法
你可以选择以下任意一种方案修复问题:
- 方案1:先转义所有待替换子串的正则元字符,再拼接为匹配模式,适合待替换词数量较多的场景
import re remove_words=['Conference Call - Final.rtf','Conference Call - F(2).rtf','Final(2).rtf'] # 批量转义每个待匹配字符串中的正则特殊字符 escaped_words = [re.escape(word) for word in remove_words] pat = '|'.join(escaped_words) df['title'] = df['conference_name'].str.replace(pat, '', regex=True)
- 方案2:逐个做字面量替换,无需处理正则元字符,适合待替换词数量较少的场景
remove_words=['Conference Call - Final.rtf','Conference Call - F(2).rtf','Final(2).rtf'] df['title'] = df['conference_name'] for word in remove_words: # regex=False 开启字面量匹配,所有字符都会按普通内容识别 df['title'] = df['title'].str.replace(word, '', regex=False)
内容的提问来源于stack exchange,提问作者Achillies
相关产品推荐
相关产品推荐

