如何在pandas DataFrame中实现类*通配符的查找替换
pandas DataFrame类通配符查找替换实现方案
针对将room列中Private room in house替换为Private的需求,以下是可直接运行的实现方式,同时说明之前代码失效的原因:
常用实现方案
- 方案1:普通字符串精确替换(新手首选,无正则语法坑)
如果你明确要替换的子串就是固定内容,直接关闭正则匹配即可,不需要写复杂规则,不会出现正则转义错误:df['room'] = df['room'].str.replace("Private room in house", "Private", regex=False) - 方案2:正则实现类
*通配效果(适配批量匹配规则)
如果要实现类似通配符Private*的效果(即所有以Private开头的内容,不管后面跟什么文本都替换为Private),正则中用.*代表任意长度的任意字符,^代表匹配字符串开头,避免误替换字符串中间出现Private的内容:
如果不需要限定开头,只需要匹配Private后接的任意内容,去掉表达式开头的# 匹配所有以Private开头的字符串,统一替换为Private df['room'] = df['room'].str.replace(r"^Private.*", "Private", regex=True)^即可。 - 方案3:整格值精确匹配替换
如果你需要仅当单元格完整值完全等于Private room in house时才替换(而非替换单元格内的部分子串),可以直接用Series级别的replace方法传映射字典:df['room'] = df['room'].replace({"Private room in house": "Private"})
之前代码失效原因
你之前写的"Private[]"属于错误的正则写法:正则语法中[]的作用是定义字符集合,比如[a-z]代表匹配任意小写字母,空的[]没有可匹配的字符规则,自然无法匹配Private后面的空格、文本内容,因此无法达到替换效果。
内容的提问来源于stack exchange,提问作者Agatha
相关产品推荐
相关产品推荐

