Pandas get_dummies应用于多个DataFrame列
在本文中,我们将介绍如何在Pandas中使用get_dummies函数将多个数据框列转换为虚拟变量(dummy variables)。虚拟变量是指在原本只能取到某些离散值的变量(比如颜色只有“红”和“蓝”两种取值),在数据处理过程中将其转化为0和1两个值的一种技术。虚拟变量通常用于机器学习、数据挖掘等领域的算法模型构建。
阅读更多:Pandas 教程
前提条件
在正式介绍使用get_dummies函数之前,我们先来了解一些Pandas的基本操作。假设我们已经有了一个以下形式的数据框:
颜色 | 形状 | 等级 | |
---|---|---|---|
0 | 红 | 圆形 | 1 |
1 | 蓝 | 正方形 | 2 |
2 | 红 | 三角形 | 3 |
3 | 蓝 | 圆形 | 1 |
我们可以通过以下代码读入/创建该数据框:
import pandas as pd
df = pd.DataFrame({
'颜色': ['红', '蓝', '红', '蓝'],
'形状': ['圆形', '正方形', '三角形', '圆形'],
'等级': [1, 2, 3, 1]
})
使用get_dummies函数
默认情况下,get_dummies只会对一个数据列进行虚拟变量的转换。例如,我们可以针对“颜色”一列调用get_dummies函数:
pd.get_dummies(df['颜色'])
该语句会生成以下数据框:
红 | 蓝 | |
---|---|---|
0 | 1 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 0 | 1 |
该数据框每个行对应原数据框每个行,每个列则对应原“颜色”列中的不同取值。
但有时,我们需要对多个列进行虚拟变量的转换,并将结果作为新的数据框列加入原数据框中。一个常见的例子是将类别特征编码为数字特征,以便于输入到机器学习算法中进行建模。我们可以通过以下的代码来实现该功能:
cols_to_transform = ['颜色', '形状']
df_with_dummy = pd.get_dummies(df, columns=cols_to_transform)
其中,cols_to_transform变量列出了我们需要进行虚拟变量转换的列名,而columns参数则指定了对哪些列进行转换。该语句会生成以下数据框:
等级 | 颜色_红 | 颜色_蓝 | 形状_圆形 | 形状_三角形 | 形状_正方形 | |
---|---|---|---|---|---|---|
0 | 1 | 1 | 0 | 1 | 0 | 0 |
1 | 2 | 0 | 1 | 0 | 0 | 1 |
2 | 3 | 1 | 0 | 0 | 1 | 0 |
3 | 1 | 0 | 0 | 0 | 1 |
数据框中新增的列名格式为“原列名取值”,例如“颜色红”表示“颜色”列中取值为“红”的情况,如果原列中有多个取值,那么会对每个取值都生成一列。
拓展用法
原始值和虚拟变量名映射
默认情况下,get_dummies函数会自动创建虚拟变量的列名。如果我们需要将虚拟变量名改为其他值,则可以通过prefix参数来实现:
pd.get_dummies(df['颜色'], prefix='color')
该语句会生成以下数据框:
color_红 | color_蓝 | |
---|---|---|
0 | 1 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 0 | 1 |
如果存在缺失数据
如果数据框中存在缺失数据,则pandas会默认将其转换为0,有时这不是我们所期望的。为了避免这种情况发生,我们可以通过dummy_na参数来指定是否需要在虚拟变量中保留缺失值信息。
pd.get_dummies(df['颜色'], dummy_na=True)
该语句会生成以下数据框:
红 | 蓝 | NaN | |
---|---|---|---|
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
2 | 1 | 0 | 0 |
3 | 0 | 1 | 0 |
总结
在本文中,我们介绍了在Pandas中使用get_dummies函数将多个数据框列转换为虚拟变量的方法。除此之外,我们还讨论了一些常见的用法拓展和参数调整。希望本文可以帮助你更好地理解和应用Pandas中的虚拟变量技术。