Python DataFrame列如何正确过滤掉不包含‘.’的记录
问题原因
pandas的str.contains()方法默认启用正则表达式匹配规则,字符.在正则语法中是通配符,代表匹配任意单个非换行字符,而非匹配字面量的点号。同时你原有代码额外增加了取反符~,逻辑完全不符合需求,因此最终结果会保留大量不含.的记录。
正确实现方案
以下写法均可以实现「保留Domain列包含.的记录、过滤掉不含.的记录」的需求:
- 方案1:对正则中的点号做转义处理
df = df[df['Domain'].str.contains(r'\.')]
- 方案2:禁用正则匹配,直接匹配字面量点号(可读性更高)
df = df[df['Domain'].str.contains('.', regex=False)]
- 健壮版优化(适配Domain列存在NaN的场景,避免布尔索引报错):
# NaN值会被视为不包含`.`,直接过滤 df = df[df['Domain'].str.contains('.', regex=False, na=False)]
内容的提问来源于stack exchange,提问作者Kim Grauer
相关产品推荐
相关产品推荐

