Что ж, можно утверждать, что однозначное кодирование / преобразование категориальных столбцов в числовые не приводит к «излишнему» увеличению количества столбцов ... на самом деле это было бы необходимостью действительно разделить все различные категории на числовые значения.
Но, если вы хотите сохранить количество столбцов, вы можете сделать что-то, где вы берете все уникальные значения в столбце и создаете словарь. Затем отобразите их обратно в столбец, используя словарь. Он также будет иметь дело с вашим 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