如何在Pandas DataFrame中筛选并删除含Unnamed的列?
如何删除Pandas DataFrame中所有名称包含"Unnamed"的列
嘿,这个需求在Pandas里其实有好几种简单的实现方式,思路和你熟悉的SQL LIKE '%Unnamed%' 非常类似,我给你拆解两种最常用的方法:
方法一:列表推导式筛选保留列
这种方式直观易懂,直接遍历所有列名,只保留不包含"Unnamed"的列:
# 重新赋值DataFrame,仅保留符合条件的列 df = df[[col for col in df.columns if 'Unnamed' not in col]]
原理很简单:我们生成一个只包含目标列名的列表,再用这个列表去索引原DataFrame,自动就剔除了所有带"Unnamed"的列。
方法二:用str.contains()匹配删除(更贴近SQL LIKE逻辑)
如果你想更贴近SQL的模糊匹配写法,可以用Pandas的str.contains()方法来定位目标列,再通过drop()删除:
# 定位所有列名包含"Unnamed"的列,然后删除 df = df.drop(columns=df.columns[df.columns.str.contains('Unnamed')])
这里df.columns.str.contains('Unnamed')会返回一个布尔数组,标记每一列的名称是否包含指定字符串;接着我们用这个数组筛选出要删除的列名,最后调用drop()完成删除。
额外小技巧
如果你的列名可能有大小写变体(比如"unnamed"或"UNNAMED"),可以添加case=False参数忽略大小写:
df = df.drop(columns=df.columns[df.columns.str.contains('Unnamed', case=False)])
举个实际例子,假设你的原DataFrame列名是:['date', 'Unnamed: 1', 'workdate', 'Unnamed: 3', 'worknumber', 'Unnamed: 5', 'weight', 'Unnamed: 7']
用上面任意一种方法处理后,剩下的列就是:['date', 'workdate', 'worknumber', 'weight']
内容的提问来源于stack exchange,提问作者Rocky
相关产品推荐
相关产品推荐

