get_dummies,LabelEncoder,OneHotEncoder,label_binarize在编码时的区别?

incipient
  • 22

用上面四种方法都能实现编码,他们的区别在哪里呢?当然脚本长度不同我已经看出来了。

get_dummies方法

df7 = DataFrame({'key':list('bbacab'),
                'data1':range(6)})

dummies = pd.get_dummies(df7.key,prefix = 'key')

dummies
dummies
0    0    1    0
1    0    1    0
2    1    0    0
3    0    0    1
4    1    0    0
5    0    1    0

LabelEncoder加get_dummies方法

这个方法主要还是用的get_dummies

le = LabelEncoder()
# le.fit(df7['key'])
df7['key2'] = le.fit_transform(df7['key'])

pd.get_dummies(df7.key2)
0    0    1    0
1    0    1    0
2    1    0    0
3    0    0    1
4    1    0    0
5    0    1    0

label_binarize方法

lab = label_binarize(df7['key'],classes = ['a','b','c'])
lab
array([[0, 1, 0],
       [0, 1, 0],
       [1, 0, 0],
       [0, 0, 1],
       [1, 0, 0],
       [0, 1, 0]])

columns = 
df7.join(pd.DataFrame(lab)).rename(columns = {0:'key_a',1:'key_b',2:'key_c'})

0    0    b    1    0    1    0
1    1    b    1    0    1    0
2    2    a    0    1    0    0
3    3    c    2    0    0    1
4    4    a    0    1    0    0
5    5    b    1    0    1    0

OneHotEncoder

onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = df7['key2'].values.reshape(len(df7['key2']), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
onehot_encoded 
# 这里生成的arry数组和label_binarize生成的一样,所以他们的区别在哪里呢?当然整数和小数的区别不算。
array([[ 0.,  1.,  0.],
       [ 0.,  1.,  0.],
       [ 1.,  0.,  0.],
       [ 0.,  0.,  1.],
       [ 1.,  0.,  0.],
       [ 0.,  1.,  0.]])

pd.DataFrame(onehot_encoded)
# 然后再用join方法即可
0    0.0    1.0    0.0
1    0.0    1.0    0.0
2    1.0    0.0    0.0
3    0.0    0.0    1.0
4    1.0    0.0    0.0
5    0.0    1.0    0.0
回复
阅读 2.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏