2016-09-13 5 views
2

, когда я запускаю этот код, я получаю следующее сообщение об ошибке:Передача серии с DTYPE = «категории» как категории для панды категоричных функции

import pandas as pd 

car_colors = pd.Series(['Blue', 'Red', 'Green'], 
      dtype='category') 

car_data = pd.Categorical(['Yellow', 'Green', 'Red', 'Blue','Purple'], 
           categories= car_colors, ordered=False) 
print car_colors 
s = pd.Series(car_data) 
s 

ValueError: object array method not producing an array

Но самое смешное, когда я удалить dtype = 'category', код работает нормально.

Короче говоря, категорический функция принимает серию, но не с dtype = 'category'

Является ли это ошибка или я делаю что-то не так?

+0

Я предполагаю, что это не имеет смысла, чтобы вновь сделать категоричный когда данные уже имеют тип dtype, поэтому в каком-то смысле это ошибка, но также немного странно хотеть сделать это таким образом. – EdChum

+0

Если вы явно передали только категории, то это работает: 'car_data = pd.Categorical (['Yellow', 'Green', 'Red', 'Blue', 'Purple'], Категории = car_colors.cat.categories, ordered = False) ' – EdChum

+0

Да, это было мое сомнение. Мы можем передавать списки и серии как категории, но не сами категории. Спасибо, что освободили EdChum –

ответ

1

Похоже, нужно добавить tolist к categories в Categorical:

car_colors = pd.Series(['Blue', 'Red', 'Green'], 
      dtype='category') 

car_data = pd.Categorical(['Yellow', 'Green', 'Red', 'Blue','Purple'], 
           categories = car_colors.tolist(), ordered=False) 

s = pd.Series(car_data) 
print (s) 

0  NaN 
1 Green 
2  Red 
3  Blue 
4  NaN 
dtype: category 
Categories (3, object): [Blue, Red, Green] 

Другим решением от EdChum's comment является использование cat.categories:

car_data = pd.Categorical(['Yellow', 'Green', 'Red', 'Blue','Purple'], 
           categories = car_colors.cat.categories, ordered=False) 
s = pd.Series(car_data) 
print (s) 
0  NaN 
1 Green 
2  Red 
3  Blue 
4  NaN 
dtype: category 
Categories (3, object): [Blue, Green, Red]