首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python的pandas中创建虚拟变量

在python的pandas中创建虚拟变量
EN

Stack Overflow用户
提问于 2012-07-21 06:33:29
回答 10查看 151.9K关注 0票数 44

我正在尝试使用python中的pandas从分类变量创建一系列虚拟变量。我遇到过get_dummies函数,但每当我尝试调用它时,我都会收到一个错误,指出该函数的名称尚未定义。

任何创建虚拟变量的想法或其他方式都将受到欢迎。

编辑:由于其他人似乎也遇到了这个问题,get_dummies函数现在可以很好地工作。这意味着以下内容应该可以工作:

代码语言:javascript
复制
import pandas as pd

dummies = pd.get_dummies(df['Category'])

有关详细信息,请参阅http://blog.yhathq.com/posts/logistic-regression-and-python.html

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-07-21 10:29:57

很难从问题中推断出你想要的是什么,但我最好的猜测如下。

如果我们假设您有一个DataFrame,其中某个列是“Category”,并且包含类别的整数(或其他唯一标识符),那么我们可以执行以下操作。

调用DataFrame dfrm,并假设对于每一行,dfrm['Category']是从1到N的整数集中的某个值。然后,

代码语言:javascript
复制
for elem in dfrm['Category'].unique():
    dfrm[str(elem)] = dfrm['Category'] == elem

现在,每个类别都将有一个新的指示符列,其值为True/False,具体取决于该行中的数据是否属于该类别。

如果你想控制类别名称,你可以创建一个字典,比如

代码语言:javascript
复制
cat_names = {1:'Some_Treatment', 2:'Full_Treatment', 3:'Control'}
for elem in dfrm['Category'].unique():
    dfrm[cat_names[elem]] = dfrm['Category'] == elem

以产生具有指定名称的列,而不仅仅是类别值的字符串转换。事实上,对于某些类型,str()可能不会产生任何对您有用的东西。

票数 23
EN

Stack Overflow用户

发布于 2014-05-29 11:26:57

当我想到虚拟变量时,我会想到在OLS回归的上下文中使用它们,我会这样做:

代码语言:javascript
复制
import numpy as np
import pandas as pd
import statsmodels.api as sm

my_data = np.array([[5, 'a', 1],
                    [3, 'b', 3],
                    [1, 'b', 2],
                    [3, 'a', 1],
                    [4, 'b', 2],
                    [7, 'c', 1],
                    [7, 'c', 1]])                


df = pd.DataFrame(data=my_data, columns=['y', 'dummy', 'x'])
just_dummies = pd.get_dummies(df['dummy'])

step_1 = pd.concat([df, just_dummies], axis=1)      
step_1.drop(['dummy', 'c'], inplace=True, axis=1)
# to run the regression we want to get rid of the strings 'a', 'b', 'c' (obviously)
# and we want to get rid of one dummy variable to avoid the dummy variable trap
# arbitrarily chose "c", coefficients on "a" an "b" would show effect of "a" and "b"
# relative to "c"
step_1 = step_1.applymap(np.int) 

result = sm.OLS(step_1['y'], sm.add_constant(step_1[['x', 'a', 'b']])).fit()
print result.summary()
票数 34
EN

Stack Overflow用户

发布于 2015-12-25 05:07:16

基于official documentation

代码语言:javascript
复制
dummies = pd.get_dummies(df['Category']).rename(columns=lambda x: 'Category_' + str(x))
df = pd.concat([df, dummies], axis=1)
df = df.drop(['Category'], inplace=True, axis=1)

在FastML博客上也有一个很好的post

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11587782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档