我认为在这种情况下,你应该坚持pd.get_dummies:>>> data
age seniority gender salary
0 1 junior male 5
1 2 senior female 6
2 3 junior female 7
# One hot encode with get_dummies
data = pd.concat((data,pd.get_dummies(data.seniority)),1)
>>> data
age seniority gender salary junior senior
0 1 junior male 5 1 0
1 2 senior female 6 0 1
2 3 junior female 7 1 0
问题是sklearn的OneHotEncoder需要有一个int数组作为输入。但是在数组data.values中,仍然有gender的字符串表示。如果你想的话,你可以只对优先级值进行一次热编码,但是如果你想知道这些特性的含义,那就不太好了,你必须手动传递列名(这在很多情况下是不可行的):
^{pr2}$
或者,如果功能名称无关紧要:from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
data['seniority'] = label_encoder.fit_transform(data['seniority'])
from sklearn.preprocessing import OneHotEncoder
one_hot_encoder = OneHotEncoder(sparse=False)
data = pd.concat((data,pd.DataFrame(one_hot_encoder.fit_transform(data['seniority'].values.reshape(-1,1)))),1)
age seniority gender salary 0 1
0 1 0 male 5 1.0 0.0
1 2 1 female 6 0.0 1.0
2 3 0 female 7 1.0 0.0
但最终,pd.get_dummies以更好的方式完成了这项工作(IMO)