如何在Python中基于RFECV特征排名筛选数据集列?
用Python实现保留RFECV排名为1的特征列
直接用pandas就能高效搞定,步骤清晰明了:
- 读取两个CSV文件
- 从排名文件中筛选出所有排名为1的特征名(或对应索引)
- 基于筛选结果提取数据集的目标列
- 保存处理后的数据集
具体代码实现
情况1:排名文件包含特征名和对应排名(推荐格式)
假设排名CSV有两列:feature_name(特征名称)和rank(RFECV排名),数据集CSV的首行是特征名(与排名文件的特征名一一对应):
import pandas as pd # 读取原始数据集和排名文件 dataset = pd.read_csv('你的数据集文件名.csv') rank_df = pd.read_csv('你的RFECV排名文件名.csv') # 筛选出排名为1的特征名称列表 selected_features = rank_df[rank_df['rank'] == 1]['feature_name'].tolist() # 若数据集包含样本标识列(如id列),需手动将其加入筛选列表 # 示例:假设第一列是id列 # selected_features.insert(0, dataset.columns[0]) # 提取目标特征列 filtered_dataset = dataset[selected_features] # 保存结果到新CSV filtered_dataset.to_csv('筛选后的数据集.csv', index=False)
情况2:排名文件仅存排名值(顺序与数据集特征列一致)
如果排名文件只有纯排名数值,且顺序和数据集的特征列顺序完全对应,可以用索引筛选:
import pandas as pd import numpy as np dataset = pd.read_csv('你的数据集文件名.csv') # 读取排名数组(假设每行一个排名值) ranks = np.loadtxt('你的排名文件名.csv', dtype=int) # 找到排名为1的特征列索引 selected_indices = np.where(ranks == 1)[0] # 提取对应列 filtered_dataset = dataset.iloc[:, selected_indices] # 保存结果 filtered_dataset.to_csv('筛选后的数据集.csv', index=False)
关于你提到的转置思路
其实没必要转置,用pandas的布尔索引或numpy的索引定位更直接。尤其是处理1500+列的数据集,pandas的表格操作效率更高,代码也更易读维护。
内容的提问来源于stack exchange,提问作者melson
相关产品推荐
相关产品推荐

