使用pandas.get_dummies一键编码时,保留列顺序

时间:2019-04-04 15:51:22

标签: python pandas one-hot-encoding

在保留从中提取类别(新列名称)的列的原始顺序的同时,对熊猫数据框中的分类特征进行一键编码的最好/最有效的Python方法是什么?

例如,如果我在数据框(df0)中有三列:[“ Col_continuous”,“ Col_categorical”,“ Label”],并且我使用

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

新数据框的新创建的列出现在“标签”列之后。我希望新列介于“ Col_continuous”和“ Label”之间。

出于鲁棒性,我希望在处理其余列中任意分类类别的数据帧时保留顺序,例如,对于[“ Cont1”,“ Cat1”,“ Cont2”,“ Cont3”,“ Cat2 “,” Labels“],我希望“ Cat1”产生的新列在“ Cont1”和“ Cont2”之间。假设我已经有一个变量,例如 categoricalCols ,它是类别特征名称的列表。

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

编辑2:添加了以“出于健壮性...”开头的段落

2 个答案:

答案 0 :(得分:0)

IIUC我会选择这样的东西:

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

这告诉熊猫将get_dummies创建的每一列都放在df.columns的中间

答案 1 :(得分:0)

我不知道它是否足够Pythonic,但是下面的代码是我发现解决更普遍问题的唯一方法:

df0['Col_categorical'] = pd.Categorical(df0['Col_categorical'])
dfDummies = pd.get_dummies(df0['Col_categorical'])
column_position = df0.columns.get_loc('Col_categorical')
df1 = df.iloc[:, :column_position]
df2 = df.iloc[:, column_position+1:]
df1hot = pd.concat([df1, dfDummies, df2], axis=1)

我得到了分类列的列位置,然后将原始数据帧分为两个数据帧,并在它们之间插入了一个热编码的列。