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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:13:13