首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:将字符串列转换为有序类别?

熊猫:将字符串列转换为有序类别?
EN

Stack Overflow用户
提问于 2014-09-19 16:35:01
回答 3查看 10.2K关注 0票数 8

我第一次和熊猫合作。我有一篇包含调查回复的专栏文章,可以采用“强烈同意”、“同意”、“不同意”、“强烈反对”和“两者都不同意”的价值观。

这是该列的describe()value_counts()的输出:

代码语言:javascript
运行
复制
count      4996
unique        5
top       Agree
freq       1745
dtype: object
Agree                1745
Strongly agree        926
Strongly disagree     918
Disagree              793
Neither               614
dtype: int64

我想对这个问题和总分做一个线性回归。但是,考虑到列本身是有序的,我有一种感觉,我应该首先将该列转换为一个类别变量。这是正确的吗?如果是的话,我该怎么做呢?

我试过这个:

代码语言:javascript
运行
复制
df.EasyToUseQuestionFactor = pd.Categorical.from_array(df.EasyToUseQuestion)
print df.EasyToUseQuestionFactor

这产生的输出看起来似乎是正确的,但似乎类别的顺序是错误的。有什么方法我可以指定订单吗?我甚至需要指定订单吗?

这是我现在剩下的代码:

代码语言:javascript
运行
复制
df = pd.read_csv('./data/responses.csv')
lm1 = ols('OverallScore ~ EasyToUseQuestion', data).fit()
print lm1.rsquared 
EN

Stack Overflow用户

发布于 2018-12-01 16:35:37

现在有两种方法。您的列的可读性更强,使用的内存也更少。由于它将是一个分类类型,您仍然可以排序这些值。

首先,我喜欢的是:

代码语言:javascript
运行
复制
df['grades'].astype('category')

astype过去接受categories参数,但它不是送礼。因此,如果您想按非词典顺序排序您的类别,或者希望您的数据中没有额外的类别,您必须使用下面的解决方案。

此建议来自于文档

代码语言:javascript
运行
复制
In [26]: from pandas.api.types import CategoricalDtype
In [27]: s = pd.Series(["a", "b", "c", "a"])
In [28]: cat_type = CategoricalDtype(categories=["b", "c", "d"],
   ....:                             ordered=True)
In [29]: s_cat = s.astype(cat_type)

额外提示:从带有df.colname.unique()的列中获取所有现有值。

票数 13
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25938557

复制
相关文章

相似问题

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