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

如何在Pandas Categorical中指定自定义编码规则?

Pandas分类编码的顺序控制方法

你提到的cat.codes编码顺序是完全可控且可预测的,默认规则和自定义实现方法如下:

默认编码逻辑

当你用df = pd.read_csv("_.csv", dtype="categorical")读入数据时,Pandas会自动生成分类列的类别列表:

  • 字符串类别的默认顺序是字典序排序;
  • 数值类别的默认顺序是数值大小排序;
  • cat.codes的编码严格对应这个列表的索引:第一个类别映射为0,第二个映射为1,以此类推。

比如数据里先出现val2再出现val1,默认读入后categories会是["val1", "val2"],val1对应0,val2对应1。

自定义编码规则的实现方式

如果要指定{"val1": 0, "val2": 1}这类映射规则,有两种常用方案:

方案1:读入后重新定义分类

先按普通方式读入数据,再将目标列转为指定类别顺序的Categorical类型:

import pandas as pd
df = pd.read_csv("_.csv")
# 指定categories顺序,第一个元素对应0,第二个对应1
df["目标列名"] = pd.Categorical(df["目标列名"], categories=["val1", "val2"], ordered=False)
# 查看编码结果
print(df["目标列名"].cat.codes)

方案2:读入时直接指定分类规则

利用pd.CategoricalDtype在读取阶段就定义好类别顺序,避免后续转换操作:

import pandas as pd
# 自定义分类类型,指定categories顺序
cat_dtype = pd.CategoricalDtype(categories=["val1", "val2"], ordered=False)
# 读取时为目标列指定该类型
df = pd.read_csv("_.csv", dtype={"目标列名": cat_dtype})
# 查看编码结果
print(df["目标列名"].cat.codes)

额外方案:直接映射为数值(非Categorical类型)

如果不需要保留Categorical类型,只是想得到指定的数值编码,可以直接用map方法:

df["目标列名"] = df["目标列名"].map({"val1": 0, "val2": 1})

这种方式会直接生成整数列,跳过Categorical的中间步骤。


内容的提问来源于stack exchange,提问作者Eike P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:31:32