6 votes

Erreur : astype() got an unexpected keyword argument 'categories'

 df = pd.DataFrame(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D'],
                      index=['excellent', 'excellent', 'excellent', 'good', 'good', 'good', 'ok', 'ok', 'ok', 'poor', 'poor'])
    df.rename(columns={0: 'Grades'}, inplace=True)
    df

J'essaie de créer une catégorie ordonnée à partir de la base de données ci-dessus en utilisant le code suivant -

df = df['Grades'].astype('category',categories=['D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+'],ordered=True)

Cependant, le message d'erreur suivant s'affiche : astype() a reçu un mot-clé inattendu 'categories' comme argument .

8voto

jezrael Points 290608

A partir de pandas 0.25+ sont supprimés ces arguments :

Suppression des arguments de mots-clés ordered et categories dans astype (GH17742)


Dans les versions plus récentes de pandas, il est nécessaire d'utiliser CategoricalDtype et la transmettre à astype :

from pandas.api.types import CategoricalDtype

cats = ['D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+']
cat_type = CategoricalDtype(categories=cats, ordered=True)
df['Grades'] = df['Grades'].astype(cat_type)
print (df)
             Grades
excellent     A+
excellent      A
excellent     A-
good          B+
good           B
good          B-
ok            C+
ok             C
ok            C-
poor          D+
poor           D

Ou utiliser Categorical :

df['Grades'] = pd.Categorical(df['Grades'], categories=cats, ordered=True)
print (df)
             Grades
excellent     A+
excellent      A
excellent     A-
good          B+
good           B
good          B-
ok            C+
ok             C
ok            C-
poor          D+
poor           D

1voto

kha Points 9

Je pense que le problème est lié à la version de votre Panda.

essayez ceci :

import pandas as pd
import numpy as np
from pandas.api.types import CategoricalDtype

df = pd.DataFrame(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D'],
                  index=['excellent', 'excellent', 'excellent', 'good', 'good', 'good', 'ok', 'ok', 'ok', 'poor', 'poor'])
df.rename(columns={0: 'Grades'}, inplace=True)
df

grades = df['Grades'].astype(CategoricalDtype(categories = ['D','D+', 
                                                       'C-', 'C', 'C+',
                                                       'B-', 'B', 'B+',
                                                       'A-', 'A', 'A+'],
                                                      ordered=True))
grades.head()

0voto

Anshul Points 1261

Je pense que vous avez oublié un crochet : df['Grades' devrait être df['Grades'].astype ...

Testé :

df = pd.DataFrame(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D'],
                      index=['excellent', 'excellent', 'excellent', 'good', 'good', 'good', 'ok', 'ok', 'ok', 'poor', 'poor'])
df.rename(columns={0: 'Grades'}, inplace=True)

df = df['Grades'].astype('category',categories=['D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+'],ordered=True)

print(df)

Sortie :

excellent    A+
excellent     A
excellent    A-
good         B+
good          B
good         B-
ok           C+
ok            C
ok           C-
poor         D+
poor          D
Name: Grades, dtype: category
Categories (11, object): [D < D+ < C- < C ... B+ < A- < A < A+]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X