特征的处理one"/>
分类特征的处理one
有的时候 分类特征是非数字型,比如是字符串类型,字符串类型是没办法直接丢给算法的,需要进行处理
one-hot 处理分类特征是常规的操作,sklearn的onehotEncoder 处理one-hot
pandas 的 get_dummies也可以处理one-hot,区别 是onehotEncoder 所有特征都会进行one-hot,get_dummies 只会处理非数值类型的特征
import pandas as pd # 导入pandas库
from sklearn.preprocessing import OneHotEncoder # 导入库
# 生成数据
df = pd.DataFrame({'id': [3566841, 6541227, 3512441],'sex': ['male', 'Female', 'Female'],'level': ['high', 'low', 'middle'],'score': [1, 2, 3]})
print(df) # 打印输出原始数据框id sex level score
0 3566841 male high 1
1 6541227 Female low 2
2 3512441 Female middle 3
# 使用sklearn进行标志转换
# 拆分ID和数据列
id_data = df[['id']] # 获得ID列
id_dataid
0 3566841
1 6541227
2 3512441raw_convert_data = df.iloc[:, 1:] # 指定要转换的列
print(raw_convert_data)
'''sex level score
0 male high 1
1 Female low 2
2 Female middle 3
'''
# 将数值型分类向量转换为标志变量
model_enc = OneHotEncoder() # 建立标志转换模型对象(也称为哑编码对象)df_new2 = model_enc.fit_transform(raw_convert_data).toarray() # 标志转换df_new2
输出结果
array([[0., 1., 1., 0., 0., 1., 0., 0.],[1., 0., 0., 1., 0., 0., 1., 0.],[1., 0., 0., 0., 1., 0., 0., 1.]])
# 合并数据
df_all = pd.concat((id_data, pd.DataFrame(df_new2)), axis=1) # 重新组合为数据框
print(df_all) # 打印输出转换后的数据框id 0 1 2 3 4 5 6 7
0 3566841 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0
1 6541227 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0
2 3512441 1.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0
使用pandas的get_dummuies ,此方法只会对非数值类型的数据做转换
df_new3 = pd.get_dummies(raw_convert_data)
df_all2 = pd.concat((id_data, df_new3), axis=1) # 重新组合为数据框
print(df_all2) # 打印输出转换后的数据框id score sex_Female sex_male level_high level_low level_middle
0 3566841 1 0 1 1 0 0
1 6541227 2 1 0 0 1 0
2 3512441 3 1 0 0 0 1
更多推荐
分类特征的处理one
发布评论