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

使用for循环批量转换DataFrame分类列为序数数值的报错咨询

解决批量转换分类列为序数类型的KeyError问题

首先咱们先定位你代码里的核心问题:你在循环里写了replace_map_comp_list.append(replace_map_comp[i]),但replace_map_comp是一个以列名为键的字典(比如{'job_level': {...}}),而i是enumerate返回的索引值(0、1、2...),字典里根本不存在0这个键,所以才会触发KeyError:0。

修正后的代码

你只需要把append的逻辑改成直接添加整个replace_map_comp字典就行,甚至不需要用enumerate(因为你根本没用到索引i):

columns_categorical = list(df_main_correlation.select_dtypes(['object']).columns) # 获取待处理列
replace_map_comp_list = []
for column in columns_categorical:
    labels = df_main_correlation[column].astype('category').cat.categories.tolist()
    # 生成当前列的序数映射字典
    replace_map_comp = {column : {k: v for k,v in zip(labels, list(range(1, len(labels)+1)))}}
    print(replace_map_comp)
    replace_map_comp_list.append(replace_map_comp) # 直接添加完整字典
replace_map_comp_list

运行这段代码后,就能得到你期望的结果:一个包含多列映射字典的列表,每一项对应一个分类列的序数映射关系。

额外优化建议

如果你不需要单独保存每个列的映射字典,而是直接想把DataFrame里的分类列转换成序数数值,其实可以用Pandas内置的cat.codes一步到位,效率更高(如果需要从1开始计数,加1即可):

for column in columns_categorical:
    # 转成category类型后,用cat.codes自动生成序数,+1让计数从1开始
    df_main_correlation[column] = df_main_correlation[column].astype('category').cat.codes + 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:53:56