例如有一个如下数据集:
import pandas as pd
testdata = pd.DataFrame({'pet': ['cat', 'dog', 'dog', 'fish'], 'age': [4, 6, 3, 3],
'salary': [4, 5, 1, 1]})
pet age salary
0 cat 4 4
1 dog 6 5
2 dog 3 1
3 fish 3 1
将testdata中的’age’列和’salary’列变成独热编码,然后合并到testdata中
age = pd.get_dummies(testdata['age'], prefix='age')
salary = pd.get_dummies(testdata['salary'], prefix='salary')
testdata.drop(["age", "salary"], axis=1, inplace=True) # 将原"age", "salary"列删掉
testdata = pd.concat((testdata, age, salary), axis=1) # 将独热编码后的列添加进去
print(age)
print(testdata)
输出:
独热编码后的age如下所示,是dataframe类型,一行代表一条数据:
age_3 age_4 age_6
0 0 1 0
1 0 0 1
2 1 0 0
3 1 0 0
最终的testdata如下所示:
pet age_3 age_4 age_6 salary_1 salary_4 salary_5
0 cat 0 1 0 0 1 0
1 dog 0 0 1 0 0 1
2 dog 1 0 0 1 0 0
3 fish 1 0 0 1 0 0
可以将此testdata作为训练集直接放到模型中训练。
也可以直接下面这样写,一次性将两列进行独热编码:
df = pd.get_dummies(testdata, columns=['age',"salary"]) # columns后放入要做独热编码的列
print(df) # 输出结果和上述一样
from sklearn.preprocessing import OneHotEncoder
age = OneHotEncoder(sparse = False).fit_transform( testdata[['age']] )
sa = OneHotEncoder(sparse = False).fit_transform( testdata[['salary']])
final_output = np.hstack((age, sa))
print(final_output )
输出:
[[0. 1. 0. 0. 1. 0.]
[0. 0. 1. 0. 0. 1.]
[1. 0. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0.]]
如果想把pet列加进去,可以尝试下如下方法:
f = []
f.extend(age)
f.extend(sa)
f.append(testdata["pet"])
参考:Python机器学习中的DictVectorizer(特征向量化)的使用说明
pandas中利用get_dummies()进行独热编码(One-Hot encoding)