Как разрешить мультикатегоричный столбец в кадре? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть фрейм данных, имеющий столбцы, а именно «заголовок» и «кухни», которые содержат несколько значений аналогичной категории. Как их разрешить и преобразовать в числовую форму? Также как заменить значения nan в таких столбцах?

Я думал о попытке «горячего кодирования», но это излишне увеличило бы количество столбцов. Возможно, я хочу, чтобы все категории были разделены. Столбец «Кухни» содержит 220 уникальных кухонь, а в разделе «Заголовок» - 24 уникальных заголовка.

Пример

enter image description here

1 Ответ

1 голос
/ 12 апреля 2019

Что ж, можно утверждать, что однозначное кодирование / преобразование категориальных столбцов в числовые не приводит к «излишнему» увеличению количества столбцов ... на самом деле это было бы необходимостью действительно разделить все различные категории на числовые значения.

Но, если вы хотите сохранить количество столбцов, вы можете сделать что-то, где вы берете все уникальные значения в столбце и создаете словарь. Затем отобразите их обратно в столбец, используя словарь. Он также будет иметь дело с вашим nan, но вам придется решить, что вы в конечном итоге хотите сделать с ним:

Дано:

import pandas as pd
import numpy as np

df = pd.DataFrame([['CASUAL DINING','Malwani, Goan, North Indian'],
                   ['CASUAL DINING,BAR','Malwani, Goan, North Indian'],
                   ['CASUAL DINING','Asian, Modern Indian, Japanese'],
                   ['QUICK BITES',np.nan],
                   ['CAFE','Bar Food'],
                   ['CASUAL DINING', 'South Indian, North Indian']], columns = ['TITLE','CUISINES']) 

Выход:

print (df)
               TITLE                        CUISINES
0      CASUAL DINING     Malwani, Goan, North Indian
1  CASUAL DINING,BAR     Malwani, Goan, North Indian
2      CASUAL DINING  Asian, Modern Indian, Japanese
3        QUICK BITES                Tibetan, Chinese
4               CAFE                        Bar Food
5      CASUAL DINING      South Indian, North Indian

Создать словарь уникальных значений:

title_unq = list(df['TITLE'].unique())
title_dict = {}
for idx, value in enumerate(title_unq):
    title_dict[value] = idx


cuisines_unq = list(df['CUISINES'].unique())
cuisines_dict = {}
for idx, value in enumerate(cuisines_unq):
    cuisines_dict[value] = idx       

Выход:

print (title_dict)
{'CASUAL DINING': 0, 'CASUAL DINING,BAR': 1, 'QUICK BITES': 2, 'CAFE': 3}

print (cuisines_dict)
{'Malwani, Goan, North Indian': 0, 'Asian, Modern Indian, Japanese': 1, 'Tibetan, Chinese': 2, 'Bar Food': 3, 'South Indian, North Indian': 4}

Затем используйте их для замены значений в столбцах:

df['TITLE'] = df['TITLE'].map(title_dict)   
df['CUISINES'] = df['CUISINES'].map(cuisines_dict)    

Выход:

print (df)
   TITLE  CUISINES
0      0         0
1      1         0
2      0         1
3      2         2
4      3         3
5      0         4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...