首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CategoricalDType列上的Pandas交叉表抛出TypeError

CategoricalDType列上的Pandas交叉表抛出TypeError
EN

Stack Overflow用户
提问于 2019-06-13 06:52:36
回答 1查看 348关注 0票数 1

考虑这样一个简单的数据集,它的列是按分位数剪切的。

代码语言:javascript
复制
kyle = pd.DataFrame({'foo':np.random.randint(0,100,100),'boo':np.random.randint(0,100,100)})
kyle.loc[:,'fooCut'] = pd.qcut(kyle.loc[:,'foo'], np.arange(0,1.1,.1))
kyle.loc[:,'booCut'] = pd.qcut(kyle.loc[:,'boo'], np.arange(0,1.1,.1))

以前的Pandas版本如预期的那样处理了以下内容...

代码语言:javascript
复制
pd.crosstab(kyle.fooCut,kyle.booCut)

在更新到版本'0.24.2‘之后,上面的代码抛出了一个TypeError: Cannot cast array data from dtype('float64') to dtype('<U32') according to the rule 'safe'

有人知道为什么和如何解决这个问题吗?注意,在这里,kyle.boocut.dtype返回CategoricalDtype,这是一种与分类变量的pd.crosstab documentation and example中的类型相同的类型。

更新

这是熊猫中已知的bug,正在修复中

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 06:58:43

作为uncovered by OP,这是一个与旋转(crosstab是幕后pivot_table的优化版本)间隔列相关的issue,目前正在修复v0.25。

以下是一个涉及交叉表的整数代码的解决方法:

代码语言:javascript
复制
cstab = pd.crosstab(kyle.fooCut.cat.codes, kyle.booCut.cat.codes)
cstab


col_0  0  1  2  3  4  5  6  7  8  9
row_0                              
0      0  2  0  1  3  1  2  1  1  1
1      1  1  0  1  1  2  1  0  1  2
2      2  1  1  0  1  1  2  0  0  0
3      2  1  3  1  2  0  0  0  0  1
4      1  2  1  0  0  2  0  1  1  2
5      0  2  0  1  0  1  0  3  3  0
6      2  0  1  2  0  2  1  1  1  1
7      1  0  0  2  2  0  1  1  2  0
8      0  1  1  0  1  1  3  1  1  1
9      1  1  2  2  0  0  2  1  0  1

如果您愿意,您可以始终将结果的索引和列分配给实际类别:

代码语言:javascript
复制
cstab.index = kyle.fooCut.cat.categories
cstab.columns = kyle.booCut.cat.categories
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56571306

复制
相关文章

相似问题

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