Python 如何解析daframe中的多类别列?
我有一个数据框,其中包含“标题”和“菜系”两列,其中包含多个类似类别的值。如何解析它们并转换为数值形式?另外,如何替换此类列中的nan值 我曾想过尝试“一个热编码”,但这会不必要地增加列数。也许我想把所有类别分开。 菜系专栏有220种独特的菜系,标题部分有24种独特的标题 示例Python 如何解析daframe中的多类别列?,python,machine-learning,data-visualization,data-cleaning,Python,Machine Learning,Data Visualization,Data Cleaning,我有一个数据框,其中包含“标题”和“菜系”两列,其中包含多个类似类别的值。如何解析它们并转换为数值形式?另外,如何替换此类列中的nan值 我曾想过尝试“一个热编码”,但这会不必要地增加列数。也许我想把所有类别分开。 菜系专栏有220种独特的菜系,标题部分有24种独特的标题 示例 好吧,有人可能会说,一个热编码/将分类列转换为数字并不是“不必要地”增加列的数量。事实上,这将是真正将所有不同类别分离为数字值的必要条件 但是,如果您想保持列的数量,您可以做一些事情,获取列中的所有唯一值并创建一个字典。
好吧,有人可能会说,一个热编码/将分类列转换为数字并不是“不必要地”增加列的数量。事实上,这将是真正将所有不同类别分离为数字值的必要条件 但是,如果您想保持列的数量,您可以做一些事情,获取列中的所有唯一值并创建一个字典。然后使用字典将它们映射回列中。它还将处理您的
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
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}
创建唯一值的字典:
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 (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
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
我猜你有一个熊猫数据框。您可以读取以填充na值。对于数字形式的转换,一种热编码通常是可行的。为什么列数是个问题?但是,如果您想知道在您的情况下,什么是最好的解决方案,您可以阅读;)