使用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
相关产品推荐
相关产品推荐

