独热编码的应用实例

独热编码的应用实例

    • 独热编码处理
    • OneHotEncoder
      • 只要传给OneHotEncoder 就会进行处理,自动认为是分类变量
    • 只对需要的列进行处理
      • 如果只使用LabelEncoder进行处理
      • Labelencoder 与 OneHotEndoer 一起使用
      • 利用pandas 的get_dummies 进行处理

独热编码处理

from sklearn.preprocessing import StandardScaler ,LabelEncoder,OneHotEncoder
import pandas as pd
import numpy as np
df7 = pd.DataFrame({'一':['first','seconde','third'],'二':list('abc'),
                '三':[9,8,7]})

独热编码的应用实例_第1张图片

OneHotEncoder

只要传给OneHotEncoder 就会进行处理,自动认为是分类变量

one = OneHotEncoder(sparse=False)
inter = one.fit_transform(df7)

pd.DataFrame(inter)

独热编码的应用实例_第2张图片

只对需要的列进行处理

如果只使用LabelEncoder进行处理

from sklearn.preprocessing import StandardScaler ,LabelEncoder,OneHotEncoder
import pandas as pd
import numpy as np
df7 = pd.DataFrame({'一':['first','seconde','third'],'二':list('abc'),
                '三':[9,8,7]})

z_var_dict={}
for var in df7.dtypes[df7.dtypes == 'object'].index:   
    num = LabelEncoder()
    df7[var] = num.fit_transform(df7[var].astype('str'))
    dict0={}
    for label in num.classes_:
        dict0[label]=num.transform([label])[0]
    z_var_dict[var]=dict0

独热编码的应用实例_第3张图片

Labelencoder 与 OneHotEndoer 一起使用

from sklearn.preprocessing import StandardScaler ,LabelEncoder,OneHotEncoder
import pandas as pd
import numpy as np
df7 = pd.DataFrame({'一':['first','seconde','third'],'二':list('abc'),
                '三':[9,8,7]})

new_dfs = []
z_var_dict={}
for col in df7.dtypes[df7.dtypes == 'object'].index:
    num = LabelEncoder()
    enc = OneHotEncoder()
    cat_col = df7.pop(col)  # 把属于种类的series pop出来
    col_name = cat_col.name  # 小DataFrame的basename,后面命名用到
    # labelencoder和onehotencoder进行fit   
    cat_col = num.fit_transform(cat_col.astype('str'))
    new_val = enc.fit_transform(cat_col.reshape(-1, 1)).toarray()
    # 保存一个小DataFrame,append到外面列表里
    n_df = pd.DataFrame(new_val, columns=[col_name + '_' + str(x) for x in num.classes_])
    new_dfs.append(n_df)
    
    # 以下是onehot码对应字典,不用可注释掉。
    dict2 = {}
    for i in num.classes_:
        dict2[i] = enc.transform(num.transform([i]).reshape(-1, 1)).toarray()
    z_var_dict[col]=dict2
    
new_dfs.append(df7)
df8 = pd.concat(new_dfs, axis=1)
print(z_var_dict)

独热编码的应用实例_第4张图片

利用pandas 的get_dummies 进行处理


from sklearn.preprocessing import StandardScaler ,LabelEncoder,OneHotEncoder
import pandas as pd
import numpy as np
df7 = pd.DataFrame({'一':['first','seconde','third'],'二':list('abc'),
                '三':[9,8,7]})

#dummies = pd.get_dummies(df7.c,prefix = 'a')


for var in df7.dtypes[df7.dtypes == 'object'].index:
    for_dummy = df7.pop(var)
    df7 = pd.concat([df7, pd.get_dummies(for_dummy, prefix=var)], axis=1)

独热编码的应用实例_第5张图片

你可能感兴趣的:(机器学习,python,独热编码)