当文本包含'.'时如何实现严格子串搜索以过滤pandas DataFrame行
问题原因
pandas.Series.str.contains() 方法默认开启正则表达式匹配规则,正则语法中.代表匹配任意单个字符,因此你写的匹配规则'bot.'会命中所有bot后紧跟任意字符的内容:不仅能匹配bot.01、bot.xx这类目标内容,也会匹配botris(bot后是r)、botmax(bot后是m)这类需要保留的内容,最终导致误删。
解决方法
你可以二选一以下任意方案修改代码:
方案1:保留正则匹配模式,对英文句号做转义,让它仅匹配字面意义的
.
示例代码:df = df[~df['column'].str.contains(r'bot\.')]其中
r标记原始字符串避免Python字符串转义冲突,\.在正则语法中专门用来匹配字面量的英文句号。方案2:关闭正则匹配,直接做纯文本子串匹配
给str.contains传入regex=False参数,此时传入的匹配内容会被当作普通文本处理,无需额外转义:df = df[~df['column'].str.contains('bot.', regex=False)]
注意:你原代码中的列名拼写为coulmn,大概率是笔误,实际使用请替换为你数据表真实的列名。
内容的提问来源于stack exchange,提问作者rocrastinator
相关产品推荐
相关产品推荐

