如何用更简洁方式通过.intersection()筛选DataFrame保留指定列?
更简洁的DataFrame列子集化写法
当你要保留的列远多于要移除的列时,完全不用定义几十项的保留列表,换个思路用取反/删除的方式会简洁很多,下面是几种实用方案:
1. 用drop()直接删不需要的列(最推荐)
只需要维护少数几个要移除的列名,一行代码搞定:
remove_features = [remove1, remove2, remove3] df_keep = df.drop(remove_features, axis=1)
怕某些列不存在报错的话,加个errors='ignore'参数自动忽略不存在的列:
df_keep = df.drop(remove_features, axis=1, errors='ignore')
2. 用~结合isin()实现取反筛选
如果你偏好基于“保留列”的逻辑,也可以用取反来筛选(不过这种场景下不如drop简洁,适合保留列少的情况):
keep_features = [keep1, keep2, ..., keep30] # 筛选出在保留列表里的列 df_keep = df.loc[:, df.columns.isin(keep_features)] # 对应的取反写法(删除保留列之外的): # df_remove = df.loc[:, ~df.columns.isin(keep_features)]
3. 直接索引列名列表(前提是列都存在)
如果能百分百确定所有要保留的列都在DataFrame里,直接索引就行,比intersection少写点代码:
df_keep = df[keep_features]
注意:这种方式如果列名不存在会报错,而intersection会自动忽略不存在的列,这点要区分开。
内容的提问来源于stack exchange,提问作者tmrgn
相关产品推荐
相关产品推荐

