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

如何一次性对多分类变量(20-400唯一值)执行Top10独热编码?

批量处理分类变量Top10独热编码并输出单个文件

问题背景

现有Person_details.csv数据集,包含507列(7个分类变量、500个数值变量)和5万行数据。每个分类变量的唯一值在20-400之间,直接独热编码会导致特征空间过大,因此选择对每个分类变量取Top10高频唯一值进行编码。当前需手动逐个处理分类变量并保存到不同文件,希望实现批量处理并输出单个合并文件。

解决方案代码

import pandas as pd
import numpy as np

# 定义批量处理TopN编码的通用函数
def encode_top_n(df, variable, top_n=10):
    # 获取该变量的TopN高频标签
    top_labels = df[variable].value_counts().sort_values(ascending=False).head(top_n).index.tolist()
    # 为每个Top标签生成独热编码列
    for label in top_labels:
        df[f"{variable}_{label}"] = np.where(df[variable] == label, 1, 0)
    # 可选:若不需要保留原始分类列,可取消下面注释
    # df.drop(variable, axis=1, inplace=True)
    return df

# 1. 读取完整数据集(包含所有数值与分类变量)
full_df = pd.read_csv("Person_details.csv")

# 2. 定义需要处理的分类变量列表
categorical_vars = ['FirstRace','Languages', 'Ethnicity', 'City', 'Country', 'Month','Field']

# 3. 循环处理所有分类变量,生成编码列
for var in categorical_vars:
    full_df = encode_top_n(full_df, var, top_n=10)

# 4. 保存最终合并后的文件
full_df.to_csv("Person_details_encoded.csv", index=False)

关键改进说明

  • 通用函数封装:encode_top_n函数可复用处理任意分类变量,自动生成TopN标签的编码列,避免重复编写相同逻辑
  • 批量循环处理:直接遍历7个分类变量列表,一次性完成所有编码操作,无需手动替换变量名
  • 全量数据合并:直接在原始数据集上生成编码列,无需拆分保存后再合并,减少IO操作和出错概率
  • 灵活可调:可通过修改top_n参数调整保留的高频标签数量,也可选择删除原始分类列(注释部分)

注意事项

  • 未进入Top10的类别会被所有编码列标记为0,不会生成额外列,有效控制特征空间规模
  • 最终数据集包含500个数值变量+7*10=70个编码列,总列数约570,不会出现特征爆炸问题
  • 5万行数据在普通机器上可直接加载,若内存紧张可拆分分块处理

内容的提问来源于stack exchange,提问作者Shourya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:01:08