如何通过正则匹配删除pandas DataFrame中含.1的列且保留含11的列
问题原因
你原来使用的正则[.|1]{2}存在逻辑错误:
- 方括号
[]定义的是字符匹配集,内部规则为匹配任意单个属于集合内的字符,你写的[.|1]实际会匹配.、|、1三类字符 - 后缀
{2}要求匹配连续2个符合集合规则的字符,因此11、.1、1.等连续2个字符属于上述集合的情况都会被命中,最终导致误删列名带11的列
修复方案
你只需要把正则调整为匹配字面量.1即可,注意正则中.是特殊通配符,需要加反斜杠转义,推荐用原始字符串r''包裹避免转义冲突。
有两种写法可选:
写法1(推荐,逻辑更直观)
直接通过列名判断反选不需要删除的列:
DX_totals = DX_totals.loc[:, ~DX_totals.columns.str.contains(r'\.1')]
写法2(沿用你原有的filter+drop逻辑)
仅调整正则部分即可:
DX_totals = DX_totals[DX_totals.columns.drop(list(DX_totals.filter(regex=r'\.1')))]
内容的提问来源于stack exchange,提问作者mountainscaler
相关产品推荐
相关产品推荐

