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?
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
Vous pouvez utiliser .cat.categories index, comme ceci:
df.lang.cat.categories[0]
Sortie:
'english'
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')