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

pandas如何替换DataFrame指定单元格单词,不改动其他单元格的相同内容?

替换实现方案

问题原因

你之前使用的str.replace()默认是子串模糊匹配,只要字段内容包含bath字符就会触发替换,因此会把sharedbath中的bath单独替换,得到不符合预期的sharedPrivate Bath结果。你需要的是全值精确匹配的替换逻辑,无需编写复杂正则,用pandas自带的映射替换方法即可实现。

方案1:映射字典替换(最适合新手,操作最简单)

直接将替换规则整理为映射字典,调用pandas列的replace()方法即可完成全值匹配替换,代码如下:

# 定义替换规则:key为原始取值,value为目标替换值
replace_rule = {
    "bath": "Private Bath",
    "baths": "Private Bath",
    "privatebath": "Private Bath",
    "sharedbath": "Shared Bath",
    "sharedbaths": "Shared Bath"
}
# 执行全值匹配替换
df["bathroom_type"] = df["bathroom_type"].replace(replace_rule)

该方法默认触发全值匹配,只有当单元格取值完全等于字典的key时才会替换,完全不会出现子串误替换的问题,14K行数据的处理速度极快,后续调整规则只需要修改映射字典即可,维护成本极低。

方案2:正则精确匹配(适合有正则基础的扩展场景)

如果需要用正则实现,只需要在匹配规则前后加字符串起止标识,限制为全值匹配即可:

# 替换私有浴室相关取值
df["bathroom_type"] = df["bathroom_type"].str.replace(r"^(bath|baths|privatebath)$", "Private Bath", regex=True)
# 替换公共浴室相关取值
df["bathroom_type"] = df["bathroom_type"].str.replace(r"^(sharedbath|sharedbaths)$", "Shared Bath", regex=True)

正则中的^代表字符串起始位置,$代表字符串结束位置,只有整个单元格内容完全匹配括号内的取值时才会触发替换,也能避免子串误替换的问题。

内容的提问来源于stack exchange,提问作者TWG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:05