gpt4 book ai didi

python - CategoricalDType 列上的 Pandas 交叉表会抛出 TypeError

转载 作者:行者123 更新时间:2023-12-01 07:43:34 24 4
gpt4 key购买 nike

考虑这个简单的数据集,其列由分位数切割。

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 的先前版本按预期处理以下内容...

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在 pandas 中并且正在修复

最佳答案

uncovered by OP ,这是一个issue与透视相关(crosstabpivot_table 底层的优化版本)间隔列,目前正在针对 v0.25 进行修复。

以下是涉及对整数代码进行交叉制表的解决方法:

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

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

cstab.index = kyle.fooCut.cat.categories
cstab.columns = kyle.booCut.cat.categories

关于python - CategoricalDType 列上的 Pandas 交叉表会抛出 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571306/

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