如何解析daframe中的多类别列?

2024-09-27 09:37:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,它有“title”和“cuisines”列,其中包含多个类似类别的值。如何解决这些问题并转换成数值形式?另外,如何替换这些列中的nan值

我曾想过尝试“一个热编码”,但这会不必要地增加列数。也许我想把所有的分类分开。 菜系栏目有220种菜系,标题部分有24种菜系

示例

enter image description here


Tags: 数据标题示例编码title分类nan类别
1条回答
网友
1楼 · 发布于 2024-09-27 09:37:16

好吧,有人可能会说,一个热编码/将分类列转换为数字并不是“不必要”地增加列的数量……事实上,这将是真正将所有不同类别分离为数字值的必要条件

但是,如果您想保持列的数量,您可以做一些事情,获取列中的所有唯一值并创建一个字典。然后使用字典将它们映射回列中。它还将处理您的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

相关问题 更多 >

    热门问题