首页 > 解决方案 > 使用 pandas.get_dummies 进行一次热编码时保留列顺序

问题描述

在 Pandas 数据框中一次性编码分类特征的最佳/最 Pythonic 方法是什么,同时保留从中提取类别(新列名)的列的原始顺序?

例如,如果我的数据框 (df0) 中有三列:["Col_continuous"、"Col_categorical"、"Labels"],并且我使用

df1hot = pd.get_dummies(df0, columns = ["Col_categorical"])

新数据框的“标签”列之后出现了新创建的列。我想要“Col_continuous”和“Labels”之间的新列。

为了稳健性,我希望在处理具有在其余列中任意排序的分类列的数据帧时保留顺序例如,对于 ["Cont1", "Cat1", "Cont2", "Cont3", "Cat2", "标签”],我希望“Cat1”产生的新列位于“Cont1”和“Cont2”之间。假设我已经有一个变量,比如categoricalCols,它是分类特征名称的列表。

编辑 1:更改df1hot = pd.get_dummies(df0, columns = ["Col_continuous"])df1hot = pd.get_dummies(df0, columns = ["Col_categorical"])感谢 Juan C 的评论。

编辑 2:添加了以“为了稳健性,...”开头的段落

标签: pythonpandasone-hot-encoding

解决方案


IIUC 我会选择这样的东西:

df.columns=['Col_continuous',*[i for i in df.columns if 'Col_categorical' in i], 'Labels']

这告诉 pandas 将由创建的每一列放在get_dummies中间df.columns


推荐阅读