在保留从中提取类别(新列名称)的列的原始顺序的同时,对熊猫数据框中的分类特征进行一键编码的最好/最有效的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:添加了以“出于健壮性...”开头的段落
答案 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)
我得到了分类列的列位置,然后将原始数据帧分为两个数据帧,并在它们之间插入了一个热编码的列。