Как узнать метки, присвоенные astype ('category'). Cat.codes? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующий фрейм данных с именем 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

Я классифицировал каждую из своих переменных в числа, используя

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

и

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

соответственно. Получение следующего фрейма данных:

      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

Теперь я хотел бы знать, есть ли способ узнать, какое исходное значение соответствует каждому значению. Я хотел бы знать, что значение 0 в столбце lang соответствует английскому и так далее.

Есть ли какая-либо функция, которая позволяет мне вернуть эту информацию?

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Вы можете создать словарь:

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

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

Итак, при необходимости это возможно 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
0 голосов
/ 29 июня 2018

Категориальный тип - это процесс факторизации. Это означает, что каждому уникальному значению или категории дается увеличенное целое значение, начиная с нуля.

Например:

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

У вас есть коды в

codes = c.cat.codes

И категории в

cats = c.cat.categories

Он предназначен для того, чтобы вы могли использовать нарезку массивов Numpy, и вы можете получить доступ к вашим ярлыкам или категориям через

cats[codes]

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

Нет необходимости создавать словарь для его поиска, когда вам уже дана конструкция для его эффективного поиска.


В качестве следующего примера, мы можем воспроизвести с помощью 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')
0 голосов
/ 29 июня 2018

Вы можете использовать индекс .cat.categories, например:

df.lang.cat.categories[0]

Выход:

'english'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...