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

如何将DataFrame含重复值的字母数字列映射为整数列并保留映射字典

Pandas 混合类型列转整数编码实现方案

要实现带重复值的字母数字混合列转整数编码、同时留存可复用映射关系的需求,直接用下面的方法即可,编码顺序和值在列中首次出现的顺序一致,完全匹配预期输出效果。


方法1:使用pandas内置factorize(无额外依赖,推荐)

factorize是pandas原生的离散值编码方法,执行效率高,不需要额外安装第三方库:

import pandas as pd

# 构造测试用示例数据
df = pd.DataFrame({
    'column': ['a', 'c1', '3vc', 'c1', 'n']
})

# 执行编码:codes为整数编码结果,uniques为按首次出现顺序排列的唯一值列表
codes, uniques = pd.factorize(df['column'])
# 编码默认从0开始计数,+1调整为从1开始,匹配输出要求
df['column'] = codes + 1

# 生成可复用映射字典,格式为 {原始字段值: 对应整数}
value_map = dict(zip(uniques, range(1, len(uniques)+1)))

后续处理同字段新数据时,直接复用字典即可,不会打乱编码规则:

new_df['column'] = new_df['column'].map(value_map)

方法2:使用sklearn的LabelEncoder

如果日常用sklearn做特征工程流程,也可以用LabelEncoder实现相同效果:

from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()
# 同样+1将编码起始值从0调整为1
df['column'] = encoder.fit_transform(df['column']) + 1

# 生成可复用映射字典
value_map = dict(zip(encoder.classes_, range(1, len(encoder.classes_)+1)))

注意事项

  • 两种方法默认的编码顺序完全匹配示例效果:第一个出现的a对应1,首次出现的c1对应2,首次出现的3vc对应3,重复出现的c1自动匹配2,后续值按首次出现顺序依次顺延编号。
  • 映射字典独立存储后,跨批次处理数据、跨脚本复用都不会出现编码不一致的问题。
  • 如果需要按值的自然排序(字母、数字排序规则)分配整数,而非按首次出现顺序分配,只需要在生成映射前对唯一值列表做排序处理即可。

处理前注意先过滤列中的空值,避免空值被编码为整数引入异常数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:45:32