web-dev-qa-db-fra.com

Comment connaître les étiquettes attribuées par astype ('catégorie'). Cat.codes?

J'ai le dataframe suivant appelé language

         lang          level
0      english         intermediate
1      spanish         intermediate
2      spanish         basic
3      english         basic
4      english         advanced
5      spanish         intermediate
6      spanish         basic
7      spanish         advanced

J'ai classé chacune de mes variables en nombres en utilisant

language.lang.astype('category').cat.codes

et

language.level.astype('category').cat.codes

respectivement. Obtention du bloc de données suivant:

      lang   level
0      0       1
1      1       1
2      1       0
3      0       0
4      0       2
5      1       1
6      1       0
7      1       2

Maintenant, j'aimerais savoir s'il existe un moyen d'obtenir quelle valeur d'origine correspond à chaque valeur. Je voudrais savoir que la valeur 0 dans la colonne lang correspond à anglais et ainsi de suite.

Existe-t-il une fonction qui me permet de récupérer cette information?

4
Marisa

Vous pouvez générer un dictionnaire:

c = language.lang.astype('category')

d = dict(enumerate(c.cat.categories))
print (d)
{0: 'english', 1: 'spanish'}

Donc, si nécessaire, c'est possible map:

language['code'] = language.lang.astype('category').cat.codes

language['level_back'] = language['code'].map(d)
print (language)
      lang         level  code level_back
0  english  intermediate     0    english
1  spanish  intermediate     1    spanish
2  spanish         basic     1    spanish
3  english         basic     0    english
4  english      advanced     0    english
5  spanish  intermediate     1    spanish
6  spanish         basic     1    spanish
7  spanish      advanced     1    spanish
6
jezrael

Vous pouvez utiliser .cat.categories index, comme ceci:

df.lang.cat.categories[0]

Sortie:

'english'
7
Scott Boston

Le type catégorique est un processus de factorisation. Cela signifie que chaque valeur ou catégorie unique se voit attribuer une valeur entière incrémentée à partir de zéro.

Par exemple:

c = language.lang.astype('category')

Vous avez des codes dans

codes = c.cat.codes

Et des catégories dans

cats = c.cat.categories

Il est conçu pour vous permettre d’exploiter le découpage en matrice Numpy et vous permet d’avoir accès à vos étiquettes ou catégories via

cats[codes]

Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
       'spanish', 'spanish'],
      dtype='object')

Il n’est pas nécessaire de construire un dictionnaire pour le rechercher, alors que vous avez déjà reçu une construction pour le rechercher de manière très efficace.


Comme autre exemple, voici comment nous pouvons répliquer avec pd.factorize

codes, cats = pd.factorize(language.lang)

print(cats, codes, cats[codes], sep='\n\n')

Index(['english', 'spanish'], dtype='object')

[0 1 1 0 0 1 1 1]

Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
       'spanish', 'spanish'],
      dtype='object')
1
piRSquared