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