python实现独热编码

例如有一个如下数据集:

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

方法一:利用get_dummies函数

对某一列进行独热编码

将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)   # 输出结果和上述一样

方法二:用OneHotEncoder函数

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)

你可能感兴趣的:(数据挖掘)