get_dummies 是 pandas 实现one hot encode的方式
one-hot的基本思想:将离散型特征的每一种特征取值都看成一种状态,若指定离散特征中有N个
不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会
使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。
1.语法结构
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
参数说明:
data : array-like, Series, or DataFrame
输入数据
prefix : string, list of strings, or dict of strings, default None
给输出的列添加前缀,如prefix=“A”,输出的列会显示类似prefix_sep:str, default ‘_’
设置前缀跟分类的分隔符sepration,默认是下划线"_"
dummy_na : bool, default False
增加一列表示空缺值,如果False就忽略空缺值
columns : list-like, default None
指定需要实现类别转换的列名
sparse:bool, default False
哑编码列是否应该支持SparseArray (True)或常规NumPy数组(False)。
drop_first : bool, default False
获得k中的k-1个类别值,去除第一个
dtype:dtype, default np.uint8
新列的数据类型,只允许一种类型的dtype
Return
DataFrame 返回哑编码后的DataFrame
2.代码示例
2.1 代码示例1
需求:对DataFrame中的所有列进行哑编码
import pandas as pd
students_df = pd.DataFrame({
'Id': [302, 504, 708, 103, 303],
'Name': ["Mike", "Christine", "Rob", "Daniel", "Jennifer"],
'Sex': ['Male', 'Female', 'Male', 'Male', 'Female'],
})
students_df_dummies = pd.get_dummies(students_df)
print(students_df)
print(students_df_dummies)
2.2 代码示例2
需求:设置 columns 只为指定的列进行哑编码
import pandas as pd
students_df = pd.DataFrame({
'Id': [302, 504, 708, 103, 303],
'Name': ["Mike", "Christine", "Rob", "Daniel", "Jennifer"],
'Sex': ['Male', 'Female', 'Male', 'Male', 'Female'],
})
students_df_dummies = pd.get_dummies(students_df, columns=["Sex"])
print(students_df)
print(students_df_dummies)
2.3 代码示例3
需求:设置prefix来修改哑编码后的列
import pandas as pd
students_df = pd.DataFrame({
'Id': [302, 504, 708, 103, 303],
'Name': ["Mike", "Christine", "Rob", "Daniel", "Jennifer"],
'Sex': ['Male', 'Female', 'Male', 'Male', 'Female'],
})
students_df_dummies = pd.get_dummies(students_df, columns=["Sex"], prefix="Column")
print(students_df)
print(students_df_dummies)
3.总结
OneHotEncoder方式之pd.get_dummies得优缺点:
优点:解决了分类器不好处理分类数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有
0和1,不同的类型存储在垂直的空间。
缺点:当类别的数量很多时,特征空间会变得非常大,容易造成维度灾难,尤其是对ID类型特征的处理。