标签编码和单热编码的混淆

问题描述

我有一个特殊要求,即在我的代码中同时应用标签编码和一次性编码。但是在我这样做之前,我试图通过一个简单的数据框来理解这个概念。请参见下面的代码

import pandas as pd

# sample dataframe

df = pd.DataFrame({'A': ['a','b','a'],'B': ['b','a','c'],'C': [1,2,3]}) ; df

    A   B   C
0   a   b   1
1   b   a   2
2   a   c   3

# a list made of categorical columns

categorical_columns = [i for i in df.columns if df[i].dtype.name == 'object']; categorical_columns

['A','B']

# apply label encoding

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()

for x in df.select_dtypes(include=['object']):
    df[x] = le.fit_transform(df[x])

df.dtypes # all column turned int after label encoding

A    int32
B    int32
C    int64
dtype: object

df # label encoding applied

    A   B   C
0   0   1   1
1   1   0   2
2   0   2   3

# Checking different scenarios of using get_dummies on the label encoded dataframe

df1 = pd.get_dummies(df); print(df1)

   A  B  C
0  0  1  1
1  1  0  2
2  0  2  3

df2 = pd.concat([df.drop('C',axis = 1),pd.get_dummies(df)],axis=1) ;print(df2)

   A  B  A  B  C
0  0  1  0  1  1
1  1  0  1  0  2
2  0  2  0  2  3

df3 = pd.concat([df,pd.get_dummies(df['A'])],axis=1) ; print(df3)

   A  B  C  0  1
0  0  1  1  1  0
1  1  0  2  0  1
2  0  2  3  1  0

df4 = pd.concat([df,pd.get_dummies(data = df,columns=['A','B'])],axis=1) ; print(df4)

   A  B  C  C  A_0  A_1  B_0  B_1  B_2
0  0  1  1  1    1    0    0    1    0
1  1  0  2  2    0    1    1    0    0
2  0  2  3  3    1    0    0    0    1

df5 = pd.concat([df,pd.get_dummies(df[categorical_columns])],axis=1) ; df5

    A   B   C   A   B
0   0   1   1   0   1
1   1   0   2   1   0
2   0   2   3   0   2

当数据框中没有分类列时,get_dummies显示所有列时,我理解 df1 df2 输出

但是,我不理解 df3 df4 输出!当我在get_dummies命令中传递各个列时,它将对整数列应用一键编码!为什么?

而且,当我在命令( df5 )中传递列表时,get_dummies不会对整数列应用单次热编码,为什么?

请,您能帮忙澄清一下吗?预先感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)