我有一个数据框,其中包含“ title”和“ cuisines”列,其中包含相似类别的多个值。如何解决它们并转换为数字形式?还有如何替换此类列中的nan值?
我考虑过尝试“一种热编码”,但这不必要地增加了列数。也许我希望所有类别都分开。 美食专栏提供220种独特美食,标题部分提供24种独特标题。
示例
答案 0 :(得分:1)
好吧,有人可能会说,将一列热编码/分类列转换为数值并不会“不必要地”增加列数。.实际上,将所有不同类别真正分解为数值类是必要的值。
但是,如果要保留列数,则可以执行以下操作:将列中的所有唯一值都用作一个字典。然后使用字典将它们映射回该列。它还可以处理您的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