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

使用sklearn.LabelEncoder编码多分类二维数组耗时过长,求高效方案

高效编码列表型特征的优化方案

你当前的遍历编码方式在大数据量下效率低下,核心原因是Python层面的逐行循环开销太大。以下是两种时间复杂度更低、运行速度更快的优化方案:

方案一:字典映射 + Pandas Apply

利用字典的O(1)查找特性,结合Pandas的apply向量化操作替代逐行循环,大幅提升效率:

from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 初始化LabelEncoder并构建映射字典
unique_words = ['Apple','Jobs','Wozniak']
le = LabelEncoder()
le.fit(unique_words)
word_code_map = dict(zip(le.classes_, le.transform(le.classes_)))

# 批量编码
df['title'] = df['title'].apply(lambda lst: [word_code_map[word] for word in lst])

优势

  • 代码简洁直观,保持原列表结构不变
  • 字典查找速度远超LabelEncoder.transform的单次调用,apply基于Pandas内部优化,比Python循环快数倍

方案二:Explode + 批量编码 + 聚合

通过展开列表、批量编码后重新聚合的方式,完全规避Python层面的循环,依赖Pandas底层C实现的操作,适合超大数据量场景:

from sklearn.preprocessing import LabelEncoder
import pandas as pd

unique_words = ['Apple','Jobs','Wozniak']
le = LabelEncoder()
le.fit(unique_words)

# 展开列表为单行单元素
df_expanded = df.explode('title')
# 批量编码所有元素
df_expanded['title'] = le.transform(df_expanded['title'])
# 按原索引重新聚合成列表
df['title'] = df_expanded.groupby(df_expanded.index)['title'].agg(list)

优势

  • 全程使用Pandas内置的向量化操作,无Python循环开销
  • 数据量越大,相比循环的性能提升越明显

注意事项

  • 如果存在未在unique_words中的异常单词,可在字典映射时添加默认值:word_code_map.get(word, -1),避免KeyError
  • 两种方案的时间复杂度均为O(N*K)(N为样本数,K为单列表平均长度),但实际运行效率远高于原遍历方案,因为减少了大量Python解释器的开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:46:05