Pandas分类数据和顺序数据转换为标志变量

#导入pandas库
import pandas as pd
#OneHotEncoder用来将数值型类别变量转换为0-1的标志性变量
#LabelEncoder用来将字符串型变量转换为数值型变量
from sklearn.preprocessing import OneHotEncoder,LabelEncoder 

#生成数据
df=pd.DataFrame({'id':[321313,246852,447902],
                'sex':['male','Female','Female'],
                'level':['high','low','middle'],
                'score':[1,2,3]})
print(df)
       id     sex   level  score
0  321313    male    high      1
1  246852  Female     low      2
2  447902  Female  middle      3


#拆分id和数据列
id_data=df[['id']] #获得id列
raw_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_all=pd.concat((id_data,pd.DataFrame(df_new2)),axis=1) #重新组合为新数据框
print(df_all) #打印输出转换后的数据框
       id    0    1    2    3    4    5    6    7
0  321313  0.0  1.0  1.0  0.0  0.0  1.0  0.0  0.0
1  246852  1.0  0.0  0.0  1.0  0.0  0.0  1.0  0.0
2  447902  1.0  0.0  0.0  0.0  1.0  0.0  0.0  1.0


# 使用pandas的get_dummies做标志转换
df_new3 = pd.get_dummies(raw_convert_data)
df_all2 = pd.concat((id_data, pd.DataFrame(df_new3)), axis=1)  # 重新组合为数据框
print(df_all2)  # 打印输出转换后的数据框
       id  score  sex_Female  sex_male  level_high  level_low  level_middle
0  321313      1           0         1           1          0             0
1  246852      2           1         0           0          1             0
2  447902      3           1         0           0          0             1

posted @ 2019-09-05 22:53  hank-li  阅读(1028)  评论(1编辑  收藏  举报