如何使用df.str.replace()仅匹配完整值进行替换?
解决Pandas DataFrame中仅完全匹配值的替换问题
你遇到的问题很典型——str.replace()默认是部分匹配替换,所以会把"Los Santos"里的"Los"也替换掉,导致出现重复的"Santos"。要实现仅完全匹配时替换,有两种简单可靠的方法:
方法1:使用Pandas内置的replace()方法(推荐)
Pandas的Series对象自带的replace()方法默认就是完全匹配替换,不需要额外设置参数,直接使用即可精准定位目标值:
import pandas as pd df = pd.DataFrame({'Name':['Mark', 'Laura', 'Adam', 'Roger', 'Anna'], 'City':['Los Santos', 'Montreal', 'Los', 'Berlin', 'Glasgow']}) # 仅替换完全等于"Los"的单元格 df['City'] = df['City'].replace('Los', 'Los Santos') print(df)
执行后的输出结果:
Name City 0 Mark Los Santos 1 Laura Montreal 2 Adam Los Santos 3 Roger Berlin 4 Anna Glasgow
这个方法简洁高效,适合绝大多数场景。
方法2:使用正则表达式的边界匹配
如果你一定要用str.replace(),可以通过正则表达式的^(字符串开头)和$(字符串结尾)来限定仅匹配整个字符串:
df['City'] = df['City'].str.replace(r'^Los$', 'Los Santos', regex=True)
这样只会匹配内容完全是"Los"的单元格,不会对"Los Santos"这类包含"Los"的字符串产生影响。
为什么之前的方法会出错?
str.replace('Los', 'Los Santos')会在每个字符串中查找所有"Los"子串并替换,所以"Los Santos"里的"Los"会被替换成"Los Santos",最终变成"Los Santos Santos",这显然不符合你的需求。而上面两种方法都能精准锁定完全匹配的目标值。
内容的提问来源于stack exchange,提问作者Nicolas Gervais
相关产品推荐
相关产品推荐

