使用zip方法替换DataFrame列中子串无效的技术求助
替换无效的原因
pandas 默认的 Series.replace() 是全字符串匹配模式,只有当单元格的完整内容和你要替换的字符串完全一致时才会生效。但你的 EVENT_DTL 列是包含多行信息的长文本,발견장소_1 这类字符串只是其中的一段子串,全匹配模式根本找不到目标,所以替换没反应。
解决办法
给 replace() 加上 regex=True 参数,开启正则匹配模式,这样就能识别单元格里的子串了:
# 先定义替换规则字典 replace_rules = dict(zip( ['발견장소_1','발견장소_2','발견장소_3','발견장소_4','발견장소_5','발견장소_6','발견장소_7','발견장소_8','발견장소_9'], ['자택','친척 집','지인 집','학교 혹은 직장','공공장소','숙박업소','교외 혹은 야산','병원',''] )) # 开启正则匹配执行子串替换 df['EVENT_DTL'] = df['EVENT_DTL'].replace(replace_rules, regex=True)
也可以用 str.replace() 方法,它默认支持正则匹配:
df['EVENT_DTL'] = df['EVENT_DTL'].str.replace(replace_rules, regex=True)
验证效果
替换完成后再运行:
print(df.loc[2143,'EVENT_DTL'])
就能看到 발견장소_1 被替换成 자택,其他匹配的子串也会按规则替换。
补充说明
- 你的替换规则里最后一项是空字符串,会直接删掉
발견장소_9这段内容,完全符合需求。 - 如果后续替换规则里包含正则特殊字符(比如
*、+),需要用re.escape()转义,但这次的발견장소_*里的_不是特殊字符,不用额外处理。
内容的提问来源于stack exchange,提问作者Chung Joshua
相关产品推荐
相关产品推荐

