如何将Pandas数据框中的字符串类别列转换为整数编码列?
Pandas 字符串分类列转数值编码的简便方案
方法1:直接使用pd.factorize()(无固定排序要求时首选)
这是最轻量化的方案,不需要额外依赖,自动按照分类首次出现的顺序生成编码,无论分类数量多少都可以直接调用:
import pandas as pd # 示例数据 df = pd.DataFrame({'brand': ['A', 'B', 'C', 'A', 'C', 'B']}) # 生成编码列 df['brand_code'] = pd.factorize(df['brand'])[0]
返回结果的第二个值为对应编码的原分类列表,可用于核对映射关系:pd.factorize(df['brand'])[1] 会输出['A', 'B', 'C']。
方法2:自定义排序映射(需要固定编码顺序时使用)
如果要求固定分类对应编码(比如必须A=0、B=1、C=2,和出现顺序无关),可以先生成排序后的映射字典再调用map:
# 按字母顺序生成映射字典,也可以自定义排序规则替换sorted逻辑 unique_brands = sorted(df['brand'].unique()) brand_map = {val: idx for idx, val in enumerate(unique_brands)} df['brand_code'] = df['brand'].map(brand_map)
生成的映射字典可以保存下来,后续处理新数据时直接复用,保证编码规则一致。
方法3:适配机器学习流程的LabelEncoder
如果后续需要把编码反向转回原字符串、或者和sklearn建模流程打通,可以使用LabelEncoder:
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() df['brand_code'] = le.fit_transform(df['brand']) # 反向转回原字符串示例 # original_brand = le.inverse_transform(df['brand_code'])
以上三种方案都支持任意数量的分类值,不需要手动逐个编写映射规则,5种以上分类的场景也可以直接使用。
内容的提问来源于stack exchange,提问作者TheSnow
相关产品推荐
相关产品推荐

