看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在机器学习和数据分析中,我们经常需要处理分类变量。但很多算法只能处理数值数据,这时就需要将分类变量转换为数值形式。pd.get_dummies() 是Pandas中专门用于此任务的利器,能够快速将分类变量转换为虚拟变量(哑变量)。本文将通过一个简单示例,带你掌握这个函数的核心用法。
假设我们有一份学生数据集,包含姓名和所在班级信息:
import pandas as pd
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'班级': ['A班', 'B班', 'A班', 'C班']
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
运行结果:
姓名 班级
0 张三 A班
1 李四 B班
2 王五 A班
3 赵六 C班
需求: 将"班级"这一列分类数据转换为虚拟变量形式,每个班级作为单独的列,用0和1表示学生是否属于该班级。
期望结果:
姓名 A班 B班 C班
0 张三 1 0 0
1 李四 0 1 0
2 王五 1 0 0
3 赵六 0 0 1
使用pd.get_dummies()函数可以直接实现这个需求。该函数会自动识别"班级"列中的所有唯一值(A班、B班、C班),并为每个值创建新的列。然后根据原始数据中每条记录的实际值,在新列中填充1(属于该班级)或0(不属于该班级)。
代码如下:
pd.concat(
[df.姓名,
pd.get_dummies(df['班级']).astype(int)
],
axis=1
)
'''
姓名 A班 B班 C班
0 张三 1 0 0
1 李四 0 1 0
2 王五 1 0 0
3 赵六 0 0 1
'''
代码分析:
pd.get_dummies(df['班级'])
:核心函数,将"班级"列转换为虚拟变量,生成一个包含A班、B班、C班三列的新DataFramepd.concat(..., axis=1)
:将原始的"姓名"列与新生成的虚拟变量列按列方向拼接补充说明:
pd.get_dummies(df['班级'], prefix='班级')
dtype
参数指定其他数据类型drop_first=True
参数避免多重共线性问题这种方法适用于任何分类变量的转换,是数据预处理中的常用技巧。
(完)
更新时间:2025-09-23 16:44:15 标签:pandas python 虚拟变量