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

如何将列中的分类数据转换为数值型数据?附实例说明

分类数据转数值型数据的实用方法

针对你提到的subjects列转换需求,我整理了几种在Python中常用的实现方式,都是日常数据处理里高频用到的:

方法1:使用pandas的factorize()方法

这个方法会自动给每个唯一分类分配一个递增的数值,正好匹配你要的1、2、3这种编码规则:

import pandas as pd

# 构造你的数据表
df = pd.DataFrame({'subjects': ['english', 'mathematics', 'science', 'english', 'science']})

# 用factorize转换,注意要加+1,因为默认从0开始编码
df['subjects_num'] = pd.factorize(df['subjects'])[0] + 1

print(df)

运行后输出的subjects_num列就是你要的[1,2,3,1,3],非常省心。

方法2:自定义映射字典(灵活可控)

如果需要手动指定每个分类对应的数值(比如后续要调整编码规则),用字典映射最稳妥:

import pandas as pd

df = pd.DataFrame({'subjects': ['english', 'mathematics', 'science', 'english', 'science']})

# 定义映射关系
subject_map = {'english': 1, 'mathematics': 2, 'science': 3}

# 用map方法转换
df['subjects_num'] = df['subjects'].map(subject_map)

print(df)

这种方式的好处是你完全掌控编码对应关系,不会因为分类顺序变化出现编码混乱。

方法3:使用sklearn的LabelEncoder(机器学习场景常用)

如果你是在做机器学习预处理,scikit-learn的LabelEncoder是标准工具:

import pandas as pd
from sklearn.preprocessing import LabelEncoder

df = pd.DataFrame({'subjects': ['english', 'mathematics', 'science', 'english', 'science']})

le = LabelEncoder()
# 同样要+1,因为LabelEncoder默认从0开始
df['subjects_num'] = le.fit_transform(df['subjects']) + 1

# 可以查看分类和编码的对应关系
print(dict(zip(le.classes_, le.transform(le.classes_) + 1)))

这个方法适合后续要和其他机器学习预处理流程结合的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:11