看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.get_dummies()
是一个用于将分类变量转换为虚拟变量(也称为哑变量、one-hot 编码)的函数。在数据分析和机器学习中,经常需要将分类变量(例如字符串或类别)转换为可以被模型处理的数值形式,get_dummies()
函数正是为此设计的。
pandas.get_dummies(
data,
prefix=None,
prefix_sep='_',
dummy_na=False,
columns=None,
sparse=False,
drop_first=False,
dtype=None
)
data:
array-like
, Series
, DataFrame
get_dummies()
会将其中的分类变量转换为虚拟变量。prefix:
str
, list[str]
, dict[str, str]
或 None
None
None
,则不会添加前缀。prefix_sep:
str
'_‘
_
。dummy_na:
bool
False
True
,会为缺失值生成一列单独的虚拟变量。columns:
list-like
或 None
None
None
,则对所有对象类型的列进行转换。sparse:
bool
False
drop_first:
bool
False
True
,会减少生成的列数。dtype:
dtype
或 None
np.uint8
uint8
,也可以指定其他数据类型。pandas.DataFrame
pandas.get_dummies()
主要用于处理分类变量,尤其是在数据准备阶段,帮助你将非数值数据转换为数值形式,以便输入到机器学习模型中。它在处理包括性别、城市名、职业等分类数据时非常有用。
s = pd.Series(list('abca'))
pd.get_dummies(s)
'''
a b c
0 True False False
1 False True False
2 False False True
3 True False False
'''
s1 = ['a', 'b', np.nan]
pd.get_dummies(s1)
'''
a b
0 True False
1 False True
2 False False
'''
pd.get_dummies(s1, dummy_na=True)
'''
a b NaN
0 True False False
1 False True False
2 False False True
'''
df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
'C': [1, 2, 3]})
pd.get_dummies(df, prefix=['col1', 'col2'])
'''
C col1_a col1_b col2_a col2_b col2_c
0 1 True False False True False
1 2 False True True False False
2 3 True False False False True
'''
pd.get_dummies(pd.Series(list('abcaa')))
'''
a b c
0 True False False
1 False True False
2 False False True
3 True False False
4 True False False
'''
pd.get_dummies(pd.Series(list('abcaa')), drop_first=True)
'''
b c
0 False False
1 True False
2 False True
3 False False
4 False False
'''
pd.get_dummies(pd.Series(list('abc')), dtype=float)
'''
a b c
0 1.0 0.0 0.0
1 0.0 1.0 0.0
2 0.0 0.0 1.0
'''
假设我们有以下数据集,其中包含了性别和城市信息:
import pandas as pd
# 构造示例数据
data = pd.DataFrame({
'Gender': ['Male', 'Female', 'Female', 'Male'],
'City': ['New York', 'Paris', 'London', 'New York']
})
print(data)
输出:
Gender City
0 Male New York
1 Female Paris
2 Female London
3 Male New York
我们可以使用 pandas.get_dummies()
将这些分类变量转换为虚拟变量:
# 将分类变量转换为虚拟变量
df_dummies = pd.get_dummies(data)
print(df_dummies)
输出:
Gender_Female Gender_Male City_London City_New York City_Paris
0 0 1 0 1 0
1 1 0 0 0 1
2 1 0 1 0 0
3 0 1 0 1 0
我们可以指定前缀,并去除多重共线性(drop_first=True
):
# 添加前缀,并去除多重共线性
df_dummies = pd.get_dummies(data, prefix=['Gender', 'City'], drop_first=True)
print(df_dummies)
输出:
Gender_Male City_New York City_Paris
0 1 1 0
1 0 0 1
2 0 0 0
3 1 1 0
在这个例子中,Gender_Female
列被去掉了,只保留了 Gender_Male
,从而减少了列数,并避免了多重共线性。
pandas.get_dummies()
是一个非常有用的工具,可以快速将分类变量转换为适合机器学习模型处理的数值数据。通过合理设置参数,你可以控制虚拟变量的生成方式,以满足不同的分析需求。
更新时间:2024-09-08 16:17:45 标签:pandas python 虚拟变量 哑变量