如何解决标签编码和单热编码的混淆
我有一个特殊要求,即在我的代码中同时应用标签编码和一次性编码。但是在我这样做之前,我试图通过一个简单的数据框来理解这个概念。请参见下面的代码块
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 举报,一经查实,本站将立刻删除。