如何在Python中对DataFrame列应用多关键词字符串过滤
解决DataFrame多关键词列筛选的语法错误问题
嘿,我来帮你搞定这个问题!你遇到的SyntaxError是因为pandas的filter()方法里,regex是关键字参数,后面不能直接跟其他位置参数,而且regex参数只接受单个正则表达式字符串,不是多个独立的关键词。
错误原因拆解
你写的代码:
df = df.filter(regex='AMP','amp','date')
这里regex='AMP'是关键字参数,后面的'amp'、'date'变成了位置参数,Python不允许关键字参数后面跟位置参数,所以直接报错了。而且就算语法没问题,regex也没法同时接收多个字符串,得用正则的逻辑把关键词整合起来。
正确的筛选方法
要筛选列名包含AMP、amp或date的列,我们需要用正则的**或操作符|**把关键词组合成一个正则表达式,有两种常用写法:
1. 区分大小写的匹配
如果你需要严格区分AMP和amp(比如只匹配这两种精确大小写的关键词),直接用|连接所有关键词:
df = df.filter(regex='AMP|amp|date')
2. 忽略大小写的匹配(更推荐)
如果AMP和amp其实是同一个关键词的大小写变体,不想区分的话,可以用正则的忽略大小写标志,这样写更简洁:
# 方法1:导入re模块,使用flags参数 import re df = df.filter(regex='amp|date', flags=re.IGNORECASE) # 方法2:用正则内置的(?i)修饰符,不用额外导入模块 df = df.filter(regex='(?i)amp|date')
这里的(?i)会让正则忽略大小写,所以amp会匹配AMP、Amp、aMp等所有大小写组合,同时还会匹配包含date的列。
验证效果
假设你的DataFrame列名是['AMP_value', 'amp_score', 'date_record', 'other_col'],用上面的代码过滤后,会保留前三个列,完美符合你的需求~
内容的提问来源于stack exchange,提问作者Unknown
相关产品推荐
相关产品推荐

