Пользовательское сопоставление категориальных и числовых значений - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть столбцы типов объектов, которые имеют категориальные значения, например 15-16 лет, 17-23 года ..... Я преобразовал их в категорию, а затем в cat.codes.Однако значения кодирования начинаются с 0 для первой группы 0-4 года, и я хочу, чтобы кодирование начиналось с 1, то есть 0-4-> 1, 5-12-> и @@ -> NaN. Предлагаемое решение использования словарякартографирование все еще имеет проблемы.Далее следует mcve

import pandas as pd
data = ['0-4 Years', '5-12 Years','13-18 Years', '19-21 Years','22-25 Years','26-29 Years','30-35 Years',
        '36-41 Years','42-45 Years','46-49 Years','50-55 Years', '56-63 Years']
df = pd.DataFrame(data,columns=['Age'],dtype=object)
df['Age']=df['Age'].astype('category')
cats = dict(enumerate(df['Age'].cat.categories, 2))
df['Age']=df['Age'].cat.codes.map(cats).astype('category')
df['Age']

, и здесь вывод, как вы можете видеть, если я изменю начало перечисления, отличное от 0, существует проблема со значениями как NaN.Во-вторых, столбец также не закодирован:

df['Age']
0             NaN
1     36-41 Years
2             NaN
3             NaN
4       0-4 Years
5     13-18 Years
6     19-21 Years
7     22-25 Years
8     26-29 Years
9     30-35 Years
10    42-45 Years
11    46-49 Years
Name: Age, dtype: category
Categories (9, object): [0-4 Years, 13-18 Years, 19-21 Years, 22-25 Years, ..., 30-35 Years, 36-41 Years, 42-45 Years, 46-49 Years]

Как это исправить.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете создать свой собственный словарь, который сопоставляет коды и категории с:

cats = dict(enumerate(df['Age'].cat.categories, 1))

И использовать этот словарь для сопоставления его в фрейме данных

df['Age'].cat.codes.map(cats).astype('category')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...