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

如何对pandas DataFrame中含185+唯一值的字符串列执行独热编码

pandas Country列one-hot编码解决方案

方案1:全量直接编码

如果可以接受新增180+列的维度规模,直接用pandas内置get_dummies方法即可,代码如下:

import pandas as pd

# 假设你的DataFrame变量名为df
df_encoded = pd.get_dummies(df, columns=['Country'], dtype=int)

参数说明:dtype=int会将编码结果转为0/1整数格式,默认返回布尔值,整数格式更适配后续建模需求。

方案2:维度控制优化方案

如果担心180+的新增列带来维度爆炸问题,可以选择以下两种优化方式:

  • 低频国家合并:仅保留高频国家,剩余低频国家统一归类为Other后再编码,可自定义保留的国家数量:
# 统计每个国家的出现频次
country_cnt = df['Country'].value_counts()
# 保留出现频次前150的国家,可根据需求调整数值
top_n_country = country_cnt.head(150).index
# 替换低频国家为Other
df['Country'] = df['Country'].apply(lambda x: x if x in top_n_country else 'Other')
# 再执行one-hot编码,最终仅新增151列
df_encoded = pd.get_dummies(df, columns=['Country'], dtype=int)
  • 稀疏矩阵存储:如果不需要降维又想节省内存,可以用sklearn的OneHotEncoder生成稀疏矩阵,适配绝大多数机器学习模型的输入要求:
import numpy as np
from sklearn.preprocessing import OneHotEncoder

# 初始化编码器,开启稀疏输出,用int8格式大幅降低内存占用
enc = OneHotEncoder(sparse_output=True, dtype=np.int8)
# 拟合转换Country列
country_enc_sparse = enc.fit_transform(df[['Country']])

注意:如果数据需要拆分训练集和测试集,必须先完成数据集拆分,再用训练集的Country列拟合编码器,再分别转换训练集和测试集,禁止用全量数据拟合编码器,避免数据泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 21:36:03