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

如何在Pandas中将含重复值的字符串列转换为连续数字?

将字符串列转换为连续数字编码的方法

嘿,这个需求在可视化场景里太常见了!不用头疼虚拟变量,pandas自带两个简单的工具就能搞定,直接把重复的字符串列转成从0开始的连续数字,完美适配散点图的需求。

方法1:用pd.factorize()(按首次出现顺序编码)

这个方法会自动识别列中的唯一值,按照它们首次出现的顺序分配0、1、2...这样的连续编码,非常直观。

举个具体的例子:

import pandas as pd

# 构造你的示例DataFrame
df = pd.DataFrame({'col': ["1120", "2230", "1120", "1234"]})

# 执行编码,取返回结果的第一个元素(编码后的数组)
df['encoded_col'] = pd.factorize(df['col'])[0]

执行后你的DataFrame会变成这样:

col  encoded_col
0  1120            0
1  2230            1
2  1120            0
3  1234            2

可以看到,每个唯一字符串都被映射成了连续的数字,完全符合你的要求。

方法2:用分类类型的cat.codes(可自定义编码顺序)

如果你希望编码顺序是按照字符串的自然排序(比如"1120"<"1234"<"2230"),可以先把列转为category类型,再提取编码:

# 先转成分类类型,默认按字符串排序分配编码
df['encoded_col'] = df['col'].astype('category').cat.codes

如果想手动指定编码顺序,也可以这样:

# 自定义唯一值的顺序,比如按["2230", "1120", "1234"]来编码
custom_order = ["2230", "1120", "1234"]
df['encoded_col'] = df['col'].astype(pd.CategoricalDtype(categories=custom_order, ordered=True)).cat.codes

这样"2230"会被编码为0,"1120"为1,"1234"为2,灵活性更高。

为什么不用虚拟变量?

虚拟变量(one-hot编码)会把每个类别转成单独的二进制列,这更适合机器学习的特征输入,但对于散点图来说,你需要的是单个连续数值列来做坐标轴或颜色映射,上面两种方法显然更贴合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:07:37