我是第一次和Pandas打交道,我有一个专栏,里面有调查结果,可以用“非常同意”、“同意”、“不同意”、“非常不同意”和“两者都不同意”来表示。
这是describe()
和value_counts()
针对数据行的输出:
count 4996
unique 5
top Agree
freq 1745
dtype: object
Agree 1745
Strongly agree 926
Strongly disagree 918
Disagree 793
Neither 614
dtype: int64
我想对此问题与总分进行线性回归。但是,我觉得应该先将该列转换为类别变量,因为它本身是有序的。这样做正确吗?如果正确,该如何操作?
我试过这个:
df.EasyToUseQuestionFactor = pd.Categorical.from_array(df.EasyToUseQuestion)
print df.EasyToUseQuestionFactor
这产生的输出看起来似乎是正确的,但似乎类别的顺序是错误的。有没有一种方法可以指定顺序?我甚至需要指定顺序吗?
下面是我的代码的其余部分:
df = pd.read_csv('./data/responses.csv')
lm1 = ols('OverallScore ~ EasyToUseQuestion', data).fit()
print lm1.rsquared
3条答案
按热度按时间oalqel3c1#
现在有两种方法。你的列会更可读,使用更少的内存。因为它将是一个分类类型,你仍然可以对值进行排序。
首先是我的首选:
astype
用于接受categories
参数,但它不是present anymore。因此,如果要以非词典顺序对类别进行排序,或者要使用数据中没有的额外类别,则必须使用下面的解决方案。此建议来自文档
额外提示:从
df.colname.unique()
列中获取所有现有值。nzkunb0c2#
是的,您应该将其转换为分类数据,这样就可以了
ar7v8xwq3#
pandas.factorize()
可以取得数组的数值表示。pandas.factorize()
,也可用作方法Series.factorize()
和Index.factorize()
第一个