版权声明:本文为博主原创文章,如若转载请注明出处 https://blog.csdn.net/tonydz0523/article/details/84261781
许多的数据采样中会有很多以以字符串形式出现的数据,这样的数据没有办法直接跟其他数值变量合并成向量,这些值一般是分类数据或是顺序数据。
- 分类数据:分类数据指某些数据类别的只能归于某一类非数值型数据,例如男、女。分类数据中的值没有明显高低好坏之分,只是由来区分两个或多个具有相同或相当价值的属性。
- 顺序数据:顺序数据只能归于某一有序类别的非数值型数据,例如用户的价制度分为高、中、低。在顺序数据中,有明显的逻辑排序。
import pandas as pd
import numpy as np
# 导入数据
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/Questionnaire.csv', usecols=[0, 1, 5])
# 更改列名
df.columns = ['Gender', 'Country', 'Edu']
df0 = df[:10]
# 看下数据
Gender Country Edu
0 Female United States Master's degree
1 Male Canada Master's degree
2 Male United States Master's degree
3 Male Taiwan Doctoral degree
4 Male Brazil Doctoral degree
5 Male United States Master's degree
6 Female India Bachelor's degree
7 Female Australia Bachelor's degree
8 Male Russia Bachelor's degree
9 Female Russia Bachelor's degree
# pandas 方法
# 使用get_dummies函数
pd.get_dummies(df0)
# 使用 sklearn
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
columes = df0.columns
for col in columes:
data = df0[col]
if data.dtype == 'object':
new_columns = []
label = LabelEncoder()
oneHot = OneHotEncoder()
la_data = label.fit_transform(data).reshape(-1, 1)
for cla in label.classes_:
new_columns.append(col+'_'+cla)
one_data = oneHot.fit_transform(la_data).toarray()
enc_df = pd.DataFrame(one_data , columns=new_columns)
del df0[col]
df0 = pd.concat([df0, enc_df], axis=1)
pandas的get_dummies和 sklearn的 OneHotEncoder区别:
-
OneHotEncoder不能直接处理字符串值。 如果你的名义特征是字符串,那么你需要先把它们映射成整数。
-
pandas.get_dummies是相反的。 默认情况下,除非指定了列,否则它仅将字符串列转换为单热表示形式。