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

如何在Pandas列中将含字母的编号转换为有序数值并支持回溯

解决方案

要实现固定映射的有序整数编码及反向回溯,用Pandas的factorize()方法最直接——它专门用来把唯一的分类值转成连续整数,而且严格按值的首次出现顺序分配编码,完全符合你的需求。

步骤1:准备数据

先把示例数据加载成DataFrame:

import pandas as pd

d = {'id': [156972, 102154, 214717, 84897, 275220, 165759, 42099, 265749, 130474, 15822], 
     'isbn': ['2842630521', '037570745X','689710879','783547528','786014091','1561581747','553571095','451210220','034540288X','345832710X']}
df = pd.DataFrame(data=d)

步骤2:正向编码(转有序整数)

调用factorize()处理目标列,它会返回两个结果:编码后的整数数组,以及所有唯一的原始值数组。

# 处理ISBN列,新增编码列
df['isbn_encoded'], unique_isbns = pd.factorize(df['isbn'])

# 如果需要把id列的唯一值也转成连续整数,同样操作
df['id_encoded'], unique_ids = pd.factorize(df['id'])

此时df['isbn_encoded']的结果就是[0,1,2,3,4,5,6,7,8,9],第一个ISBN'2842630521'对应0,第二个'037570745X'对应1,完全符合你的要求。如果有重复值,同一个原始值会被分配相同的编码。

步骤3:反向映射(整数回溯原始值)

利用unique_isbns数组的索引(也就是编码值)和原始值的对应关系,直接构建反向字典:

# ISBN反向映射:编码值 → 原始ISBN字符串
isbn_reverse_map = {code: isbn for code, isbn in enumerate(unique_isbns)}

# id反向映射:编码值 → 原始id
id_reverse_map = {code: idx for code, idx in enumerate(unique_ids)}

现在就能快速通过编码值找原始值了:

print(isbn_reverse_map[0])  # 输出:'2842630521'
print(isbn_reverse_map[1])  # 输出:'037570745X'

为什么用factorize()?

  • 映射关系固定:只按首次出现顺序分配编码,不会随机变化,后续重复处理同一数据时结果完全一致。
  • 效率高:内部实现优化过,比手动遍历构建映射快得多。
  • 同时支持正向编码和反向映射的基础数据,一步到位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:06:02