You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python Pandas的通用无用特征列删除方法(未知列名场景)

机器学习数据预处理:自动删除高唯一值无用特征列

原代码问题说明

  1. trash函数里的df.drop(columns=[x],inplace=True)中x未定义,运行会直接报错
  2. 未遍历特征列做唯一值判断,无法批量识别无用列
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:50:53