Pandas中使用正则负前瞻筛选不含_y列失败问题排查
Pandas筛选不含"_y"列的正则问题
你使用的正则表达式(?!_y)逻辑有误,导致filter返回了整个DataFrame。
问题原因
(?!_y)是正向否定预查,它仅检查"当前位置的后续字符不是'_y'",而非判断整个列名是否包含'_y'。比如列名col2_y,开头字符c的后续不是'_y',这个列名就会被正则匹配到,最终所有列都被保留。
正确写法
方法1:修正正则表达式
使用能覆盖整个列名的正则,确保字符串中不存在'_y'子串:
dat1.filter(regex=r"^((?!_y).)*$")
方法2:更直观的列筛选方式
用str.contains配合取反操作,逻辑更清晰:
dat1.loc[:, ~dat1.columns.str.contains('_y')]
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

