当我们想要将一个分类变量转换为一组虚拟二元变量,通常使用虚拟变量。例如,当我们有一个代表汽车颜色的字符串列时,我们可以使用虚拟变量来将其拆分为单独的布尔值列。 Panda提供了创建虚拟变量的函数get_dummies()
。本文将详细介绍如何使用Pandas在Python中创建虚拟变量。
步骤一:导入数据
首先,我们需要导入需要处理的数据,例如从CSV文件中读取数据,或从数据库中获取数据等。在本文中,我们将使用Pandas内置的dataframe。
import pandas as pd
data = pd.read_csv('data_file.csv')
步骤二:选择分类变量
接下来,我们需要选择一个或多个需要转换的分类变量。在本例中,我们将选取一列代表汽车颜色的列。
colors = pd.DataFrame(data['colors'])
步骤三:创建虚拟变量
现在,我们可以以任意命名方式调用get_dummies(),并传递预选的分类变量。get_dummies()函数将自动对分类变量创建虚拟变量。
dummies = pd.get_dummies(colors)
现在,dummies
是一个完全由二元变量组成的数据帧。我们可以使用dataframe的head()方法来查看输出结果。
print(dummies.head())
示例一
假设现在我们有如下的一张表格,其中product_name是商品名称,category是商品所属的类别。
id | product_name | category | |
---|---|---|---|
0 | 1 | Product_1 | Category_A |
1 | 2 | Product_2 | Category_B |
2 | 3 | Product_3 | Category_C |
3 | 4 | Product_4 | Category_A |
4 | 5 | Product_5 | Category_B |
5 | 6 | Product_6 | Category_C |
使用Pandas可以非常方便地将分类变量category转换为虚拟变量。我们只需要使用get_dummies()函数即可:
import pandas as pd
df = pd.read_csv('data.csv')
dummies = pd.get_dummies(df['category'], prefix='category')
df = pd.concat([df, dummies], axis=1)
df.drop(['category'], axis=1, inplace=True)
print(df.head())
输出结果如下:
id | product_name | category_A | category_B | category_C | |
---|---|---|---|---|---|
0 | 1 | Product_1 | 1 | 0 | 0 |
1 | 2 | Product_2 | 0 | 1 | 0 |
2 | 3 | Product_3 | 0 | 0 | 1 |
3 | 4 | Product_4 | 1 | 0 | 0 |
4 | 5 | Product_5 | 0 | 1 | 0 |
5 | 6 | Product_6 | 0 | 0 | 1 |
使用这种方式,我们可以将分类变量category转换为虚拟变量,方便之后的分析。
示例二
现在我们有两列分类变量,其中一列代表汽车颜色,另一列代表汽车品牌。由于get_dummies()函数只接受一列数据,我们需要将每个分类变量单独处理,然后通过Pandas的concat()方法组合它们。
# 创建示例数据
data = {'Color': ['Red', 'Yellow', 'Green', 'Red', 'Yellow', 'Green'],
'Brand': ['Toyota', 'Honda', 'Toyota', 'Toyota', 'Honda', 'Toyota']}
df = pd.DataFrame(data)
# 解决问题
color_dummies = pd.get_dummies(df.Color, prefix='Color')
brand_dummies = pd.get_dummies(df.Brand, prefix='Brand')
result = pd.concat([df, color_dummies, brand_dummies], axis=1)
result.drop(['Color', 'Brand'], axis=1, inplace=True)
print(result.head())
输出结果如下:
Color_Green | Color_Red | Color_Yellow | Brand_Honda | Brand_Toyota |
---|---|---|---|---|
0 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
在这个例子中,我们选择了两个分类变量:汽车颜色和汽车品牌。我们使用get_dummies()函数分别对这两个分类变量进行处理,并使用Pandas的concat()方法将结果组合起来。最后,我们删除原始分类变量,并输出结果数据帧。
使用这种方式,我们可以方便地将多个分类变量转换为虚拟变量,并组合在一个数据帧中,以便分析和可视化。