如何使用df.loc排除名称含指定字符(如X)的DataFrame列?
用df.loc排除列名含指定字符的列
要通过df.loc实现排除列名包含特定字符(比如“X”)的列,核心思路是先筛选出列名不包含目标字符的列集合,再传递给df.loc的列索引参数。
方法1:列表推导式手动筛选列名
先遍历所有列名,挑出不含“X”的列,再用df.loc选取:
# 生成保留的列名列表:所有不含"X"的列 cols_to_keep = [col for col in df.columns if "X" not in col] # 选取所有行 + 目标列 filtered_df = df.loc[:, cols_to_keep]
方法2:结合字符串方法+取反(更简洁)
利用pandas列名的str.contains方法配合取反符号~,直接在df.loc中完成筛选:
# ~表示取反,筛选列名不包含"X"的列 filtered_df = df.loc[:, ~df.columns.str.contains("X")]
小提示:如果你的列名存在非字符串类型(比如数字),需要先转成字符串再筛选:
~df.columns.astype(str).str.contains("X")
补充:和df.filter的反向用法对比
你已经掌握df.filter(like='X')筛选含“X”的列,其实df.filter也能直接实现排除,用正则表达式参数:
# 用df.filter排除含"X"的列(作为拓展参考) filtered_df = df.filter(regex=r'^(?!.*X).*$')
但如果指定要用df.loc,前面两种方法完全满足需求。
内容的提问来源于stack exchange,提问作者geaa
相关产品推荐
相关产品推荐

