如何将列中的分类数据转换为数值型数据?附实例说明
分类数据转数值型数据的实用方法
针对你提到的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
相关产品推荐
相关产品推荐

