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
相关产品推荐
相关产品推荐

