基于Python Pandas的通用无用特征列删除方法(未知列名场景)
机器学习数据预处理:自动删除高唯一值无用特征列
原代码问题说明
trash函数里的df.drop(columns=[x],inplace=True)中x未定义,运行会直接报错- 未遍历特征列做唯一值判断,无法批量识别无用列
trash函数无需传入attr参数,直接操作DataFrame更简洁
完善后的代码
import pandas as pd import numpy as np df_train = pd.read_csv("assets\\playtennis.csv") # 读取数据集 print(df_train.head()) # 打印前5行,原代码仅调用head()未输出,看不到实际数据 # 获取排除类标签的特征列列表 def attributes(df, label): return df.columns.drop(label).values.tolist() # 识别并删除唯一值数量等于样本数的无用列 def trash(df, label): total_samples = df.shape[0] useless_cols = [] # 遍历所有列,跳过类标签列 for col in df.columns: if col == label: continue # 计算当前列的唯一值数量 unique_count = df[col].nunique() # 判断是否为无用列 if unique_count == total_samples: useless_cols.append(col) # 批量删除无用列 if useless_cols: df.drop(columns=useless_cols, inplace=True) print(f"已删除无用列:{useless_cols}") else: print("未发现符合条件的无用列") # 取最后一列作为类标签 class_label = df_train.columns[-1] attr = attributes(df_train, class_label) # 保留原函数,若后续需用特征列列表可直接调用 trash(df_train, class_label)
代码关键说明
df[col].nunique():高效计算列的唯一值数量,比len(df[col].unique())性能更好- 先收集所有无用列再批量删除,比循环单删更高效
- 增加打印提示,方便直观查看操作结果
内容的提问来源于stack exchange,提问作者J Stark
相关产品推荐
相关产品推荐

