You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用负向零宽断言过滤Pandas列未生效,求原因及解决方法

问题分析与解决

你的正则表达式(?<!bad).*未能生效的核心原因是逻辑偏差:它匹配的是任意位置前不是bad的字符序列,而bad_one这类列名中,除开头的bad外,后续的_one等部分都满足“前面不是bad”的条件,因此会被错误匹配。

正确解决方法

方法1:使用负向预查正则

要筛选不以bad开头的列,需针对列名的起始位置做判断,用^(?!bad)正则即可:

df.filter(regex=r'^(?!bad)')

输出结果:

good_one
0         1
1         2
2         3

^表示列名的起始位置,(?!bad)是负向预查断言,确保起始位置后不是bad,仅开头非bad的列会被选中。

方法2:用字符串方法筛选(更直观)

若觉得正则晦涩,可直接用Pandas字符串方法结合布尔索引:

df.loc[:, ~df.columns.str.startswith('bad')]

通过str.startswith('bad')判断列名是否以bad开头,再用~取反,最终筛选出符合要求的列,结果与上述一致。


内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:55:12