Кросс-таблица панд по столбцам CategoryorTType вызывает ошибку TypeError - PullRequest
1 голос
/ 13 июня 2019

Рассмотрим этот простой набор данных, столбцы которого вырезаны квантилями.

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 и примере для категориальных переменных.

[Обновление]

Это известная ошибка в пандах и исправляется

1 Ответ

1 голос
/ 13 июня 2019

Поскольку обнаружено OP , это проблема , связанная с поворотом (crosstab - оптимизированная версия pivot_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...