分类任务中如何将两位国家代码替换为类别数值?
分类问题中国家代码转数字类别方法
以下是两种高效实现国家代码到数字类别转换的方法,适合处理包含70+唯一国家代码的数据集:
使用pandas的
factorize()方法
该方法会自动为每个唯一国家代码分配递增数字,操作简单且能保留映射关系:import pandas as pd # 构建示例数据框 df = pd.DataFrame({'acq_cc': ['KY', 'US', 'CN', 'SG', 'US', 'SG', 'US', 'US', 'CZ', 'CN']}) # 完成编码转换,同时获取唯一代码列表 df['acq_cc_num'], unique_codes = pd.factorize(df['acq_cc']) # 若需要数字从1开始(而非默认的0),直接加1即可 df['acq_cc_num'] = df['acq_cc_num'] + 1 # 输出转换结果 print(df['acq_cc_num'].tolist()) # 结果: [1, 2, 3, 4, 2, 4, 2, 2, 5, 3] # 查看完整映射关系 print(dict(zip(unique_codes, range(1, len(unique_codes)+1))))使用sklearn的
LabelEncoder()
如果后续要对接机器学习模型训练,这个方法更适配机器学习工作流:from sklearn.preprocessing import LabelEncoder import pandas as pd df = pd.DataFrame({'acq_cc': ['KY', 'US', 'CN', 'SG', 'US', 'SG', 'US', 'US', 'CZ', 'CN']}) # 初始化编码器 le = LabelEncoder() # 拟合数据并完成编码,加1让数字从1开始 df['acq_cc_num'] = le.fit_transform(df['acq_cc']) + 1 # 输出转换结果 print(df['acq_cc_num'].tolist()) # 结果: [1, 2, 3, 4, 2, 4, 2, 2, 5, 3] # 查看国家代码与数字的映射关系 print(dict(zip(le.classes_, le.transform(le.classes_) + 1)))
两种方法都能自动处理全部70多个唯一国家代码的映射,无需手动逐个定义转换规则。
内容的提问来源于stack exchange,提问作者Paul Engelbert
相关产品推荐
相关产品推荐

