Python DataFrame列字符替换失效:replace方法未生成预期结果
解决Pandas DataFrame中replace方法未生效的问题
嘿,我懂你碰到的糟心事了——你想把Phone列里的"("替换成"xxx",结果生成的NewPhone列和原列完全一样,半点儿变化都没有对吧?这其实是因为pandas默认的replace是全匹配替换,也就是说它只会替换那些**整个单元格内容完全等于"("**的情况,而你的Phone列里的内容应该是类似"(123)456789"这种包含括号的完整手机号,单个括号只是单元格内容的一部分,所以默认的全匹配模式找不到匹配项,自然就没替换啦。
下面给你两种靠谱的解决办法:
方法1:使用Series.str.replace()
这是处理字符串部分替换最直接的方式,专门针对Series里的字符串进行子串替换:
import pandas as pd SF = pd.read_csv(r"xxx.csv") # 使用str.replace针对字符串子串替换,regex=False避免括号被当成正则解析 SF['NewPhone'] = SF['Phone'].str.replace("(", 'xxx', regex=False) print(SF['NewPhone'])
方法2:给replace()加上regex=True参数
如果你还是想用原生的replace方法,只需要开启正则匹配模式,这样它就会查找单元格里的子串并替换了:
import pandas as pd SF = pd.read_csv(r"xxx.csv") # 开启正则匹配,注意转义正则特殊字符"(" SF['NewPhone'] = SF['Phone'].replace("\(", 'xxx', regex=True) print(SF['NewPhone'])
这里括号前面加了反斜杠\转义,因为在正则表达式里(是特殊元字符,必须转义才能表示普通的括号字符。
两种方法都能解决你的问题,选哪种看个人习惯~
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

