Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解析daframe中的多类别列?_Python_Machine Learning_Data Visualization_Data Cleaning - Fatal编程技术网

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

Python 如何解析daframe中的多类别列?,python,machine-learning,data-visualization,data-cleaning,Python,Machine Learning,Data Visualization,Data Cleaning,我有一个数据框,其中包含“标题”和“菜系”两列,其中包含多个类似类别的值。如何解析它们并转换为数值形式?另外,如何替换此类列中的nan值 我曾想过尝试“一个热编码”,但这会不必要地增加列数。也许我想把所有类别分开。 菜系专栏有220种独特的菜系,标题部分有24种独特的标题 示例 好吧,有人可能会说,一个热编码/将分类列转换为数字并不是“不必要地”增加列的数量。事实上,这将是真正将所有不同类别分离为数字值的必要条件 但是,如果您想保持列的数量,您可以做一些事情,获取列中的所有唯一值并创建一个字典。

我有一个数据框,其中包含“标题”和“菜系”两列,其中包含多个类似类别的值。如何解析它们并转换为数值形式?另外,如何替换此类列中的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值。对于数字形式的转换,一种热编码通常是可行的。为什么列数是个问题?但是,如果您想知道在您的情况下,什么是最好的解决方案,您可以阅读;)