2016-09-13 2 views
2

quand je lance ce code, je reçois l'erreur suivante:Passage série avec DTYPE = « catégorie » comme catégories pour Pandas fonction catégorielles

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

Mais le plus drôle est, quand je retire le dtype = 'category', le code fonctionne bien.

Donc en bref, la fonction catégorique est d'accepter la série mais pas avec dtype = 'category'

Est-ce un bug ou que je fais quelque chose de mal?

+0

Je suppose que cela n'a pas de sens de re-faire une catégorique quand les données ont déjà dtype de catégorie c'est donc un bug dans un certain sens mais aussi un peu bizarre de vouloir le faire de cette façon – EdChum

+0

Si vous avez explicitement passé juste les catégories alors ça marche: 'car_data = pd.Categorical (['Jaune', 'Vert', 'Rouge', 'Bleu', 'Purple'], categories = car_colors.cat.catégories, classés = Faux) ' – EdChum

+0

Ouais, c'était exactement mon doute. Nous pouvons transmettre des listes et des séries en tant que catégories mais pas les catégories elles-mêmes. Merci d'avoir nettoyé EdChum –

Répondre

1

Il ressemble besoin d'ajouter tolist-categories dans 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] 

Une autre solution de EdChum's comment est d'utiliser 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]