如何在Pandas中根据部分列名列表批量删除DataFrame列?
解决Pandas删除包含指定字符串列的问题
错误原因
你之前的代码报错是因为df.filter()的items、like、regex参数互斥,不能同时传入待匹配的字符串列表和regex=True。
正确实现方法
直接通过正则匹配列名,定位需要删除的列后执行删除操作:
- 将
dropthese['partname']中的所有字符串拼接成正则表达式(用|分隔,表示匹配任意一个目标字符串) - 筛选出df中列名包含任一目标字符串的列
- 删除这些列
基础版代码
# 拼接正则匹配规则 match_pattern = '|'.join(dropthese['partname'].tolist()) # 找出要删除的列 columns_to_drop = df.columns[df.columns.str.contains(match_pattern)] # 删除列(需赋值回df,或添加inplace=True直接修改原数据) df = df.drop(columns_to_drop, axis=1)
处理特殊字符的进阶版
如果partname里包含正则特殊字符(比如.、*、?等),需要先转义避免匹配逻辑出错:
import re # 转义每个字符串后再拼接正则规则 match_pattern = '|'.join(re.escape(part) for part in dropthese['partname'].tolist()) columns_to_drop = df.columns[df.columns.str.contains(match_pattern)] df = df.drop(columns_to_drop, axis=1)
补充说明
- 若想直接修改原DataFrame,无需重新赋值,可给
drop方法添加inplace=True参数:df.drop(columns_to_drop, axis=1, inplace=True) - 如需忽略大小写匹配,给
str.contains()添加case=False参数即可
内容的提问来源于stack exchange,提问作者anarchy
相关产品推荐
相关产品推荐

