gpt4 book ai didi

python - 使用 get_dummies 时删除冗余列

转载 作者:行者123 更新时间:2023-11-28 22:18:57 25 4
gpt4 key购买 nike

你好,有一个包含分类变量的 Pandas 数据框 df

df=pandas.DataFrame(data=[['male','blue'],['female','brown'],
['male','black']],columns=['gender','eyes'])

df
Out[16]:
gender eyes
0 male blue
1 female brown
2 male black

使用函数 get_dummies 我得到以下数据框

df_dummies = pandas.get_dummies(df)

df_dummies
Out[18]:
gender_female gender_male eyes_black eyes_blue eyes_brown
0 0 1 0 1 0
1 1 0 0 0 1
2 0 1 1 0 0

gender_femalegender_male 列包含相同的信息,因为原始列可以采用二进制值。有没有一种(聪明的)方法可以只保留两列中的一列?

已更新

使用

df_dummies = pandas.get_dummies(df,drop_first=True)

会给我

df_dummies
Out[21]:
gender_male eyes_blue eyes_brown
0 1 1 0
1 0 0 1
2 1 0 0

但我想删除最初我只有两种可能性的列

想要的结果应该是

df_dummies
Out[18]:
gender_male eyes_black eyes_blue eyes_brown
0 1 0 1 0
1 0 0 0 1
2 1 1 0 0

最佳答案

是的,你可以使用参数dropfirst:

drop_first=True

来自documentation :

pd.get_dummies(pd.Series(list('abcaa')), drop_first=True)
b c
0 0 0
1 1 0
2 0 1
3 0 0
4 0 0

要为 eyes 设置所有虚拟列,为 gender 创建一个虚拟列,请使用:

df = pd.get_dummies(df, prefix=['eyes'], columns=['eyes'])
df = pd.get_dummies(df,drop_first=True)

输出:

       eyes_black  eyes_blue  eyes_brown  gender_male
0 0 1 0 1
1 0 0 1 0
2 1 0 0 1

更一般的:

   gender   eyes    heigh
0 male blue tall
1 female brown short
2 male black average

for i in df.columns:
if len(df.groupby([i]).size()) > 2:
df = pd.get_dummies(df, prefix=[i], columns=[i])
df = pd.get_dummies(df, drop_first=True)

输出:

   eyes_black  eyes_blue  eyes_brown  heigh_average  heigh_short  heigh_tall  \
0 0 1 0 0 0 1
1 0 0 1 0 1 0
2 1 0 0 1 0 0

gender_male
0 1
1 0
2 1

关于python - 使用 get_dummies 时删除冗余列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com