Python Pandas库使用get_dummies()进行 one-hot编码

   在机器学习进行数据预处理的时候,通常会对一些数据进行特征离散化处理,即将文本或者其他内容进行使用数字替代,方便后续的操作。在离散特征的时候,需要注意以下几点:

1 离散特征的取值之间没有大小的意义,比如color:[green,blue],那么就使用one-hot编码,形成一个N阶的方阵,此处的N与属性中的不重复特征数目一致。
2 离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}说明:对于有大小意义的离散特征,直接使用映射就可以了,{'XL':3,'L':2,'M':1}

下面使用 Pandas 中的 get_dummies()进行one-hot 当然还可以使用 Sklearn库中的进行编码。

# -*-coding=utf-8-*-
import pandas as pd

df = pd.DataFrame([
    ['yellow', 'M', 12.1, 'class1'],
    ['red', 'L', 15.8, 'class2'],
    ['blue', 'XL', 17.6, 'class1']])
df.columns = ['color', 'size', 'prize', 'class label']
size_mapping = {'XL': 3,'L': 2,'M': 1}
df['size'] = df['size'].map(size_mapping)#将 size映射为 3,2,1
#根据set(df['class label'])将df['class label']中重复数据据去除
# enumerate(set(df['class label'])) 返回数据索引和数据
class_mapping = {label: idx for idx, label in enumerate(set(df['class label']))}
df['class label'] = df['class label'].map(class_mapping)
print('-----------未进行One-hot编码 注意颜色列---------------')
print(df)
print('-----------进行One-hot编码 注意颜色列--------------------')
df = pd.get_dummies(df)
print(df)

运行结果为:

使用 One-hot编码是让特征变位稀疏矩阵,如下的代码示例:

import pandas as pd
import numpy as np
s = pd.Series(list('abca'))
print(pd.get_dummies(s))
s1 = ['a', 'b', np.nan]
print(pd.get_dummies(s1))
print(pd.get_dummies(s1, dummy_na=True))#设置显示 Nan

运行结果:

下面进行只编码前两列

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
               'C': [1, 2, 3]})
#只对 前两列进行编码prefix=[args],根据args的数目进行编码 如果只有一个则只编码第一列
t=pd.get_dummies(df, prefix=['A','B'])
print(t)

猜你喜欢

转载自blog.csdn.net/qq_29750461/article/details/81583229