在Pandas数据帧中使用哪一种最佳/最Pythonic的方法来实现一种热编码分类特性,同时保持从其中提取类别(新列名)的列的原始顺序?
例如,如果数据框架(Df0)中有三列:"Col_continuous“、"Col_categorical”、"Labels",则使用
df1hot = pd.get_dummies(df0, columns = ["Col_categorical"])
新的数据框架中新创建的列出现在“标签”列之后。我希望新列在"Col_continuous“和”标签“之间。
为了健壮性,我希望在处理数据帧时保留顺序,在其他列中任意排序,例如对于"Cont1“、"Cat1”、"Cont2“、"Cont3”、"Cat2“、”标签“,我希望"Cat1”产生的新列介于"Cont1“和"Cont2”之间。假设我已经有了一个变量,比如categoricalCols,它是一个分类特性的名称列表。
编辑1:由于Juan的评论,df1hot = pd.get_dummies(df0, columns = ["Col_continuous"])改为df1hot = pd.get_dummies(df0, columns = ["Col_categorical"])。
编辑2:增加了以“用于健壮性,.”开头的段落
发布于 2019-04-04 15:57:15
我会做这样的事情:
df.columns=['Col_continuous',*[i for i in df.columns if 'Col_categorical' in i], 'Labels']这告诉熊猫把get_dummies创建的每一个专栏都放在df.columns的中间。
发布于 2020-04-25 12:17:55
我不知道它是否足够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)我得到分类列的列位置,然后将原始的dataframe分割成两个dataframe,并在它们之间插入一个热编码的列。
https://stackoverflow.com/questions/55520223
复制相似问题