Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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中从csv构建多类列表?_Python_List_Dataframe_Classification_Multiclass Classification - Fatal编程技术网

如何在Python中从csv构建多类列表?

如何在Python中从csv构建多类列表?,python,list,dataframe,classification,multiclass-classification,Python,List,Dataframe,Classification,Multiclass Classification,我正试图建立一个基于像这样的数据框架的列表 TRAINING_DATA = [ ["accepted",{"APP": True , "FEE": False, "THY": False}], ["change accepted",{"APP": True , "FEE": False, "THY": False}],

我正试图建立一个基于像这样的数据框架的列表

TRAINING_DATA = [
   ["accepted",{"APP": True , "FEE": False, "THY": False}],
   ["change accepted",{"APP": True , "FEE": False, "THY": False}],
   ["yes i approve these changes",{"APP": True , "FEE": False, "THY": False}]
]
从Jupyter我可以毫无问题地创建它。但是,我需要从csv文件构建它。目前,我正在尝试以下内容:

text;class
"accepted"; {'APP': True , 'FEE': False, 'THY': False}
"change accepted";{'APP': True , 'FEE': False, 'THY': False}
在Python中,我使用以下命令加载文件:

df = pd.read_csv("prueba.csv", usecols=['text','class'], delimiter=";")
但是,正如标题中所述,我需要构建一个列表,将类列作为对象而不是文本。我用这句话创建了列表:

newList = df.values.tolist()
newList
但是,结果并不是预期的:

[['accepted', " {'APP': True , 'FEE': False, 'THY': False}"],
['change accepted', "{'APP': True , 'FEE': False, 'THY': False}"]]
可以看到,列表的第二个“列”被转换为字符串。我需要的是这个(没有“):

值得一提的是,我已经完成了以下句子:

df['class'] = df['class'].astype(object)
df['class'] = df['class'].astype('category')
但是没有成功


我需要知道的是如何写入csv文件,以及为了完成此任务,应该对数据帧进行什么处理?

您需要做的是将包含字典的字符串转换为字典,这可以使用
ast.literal\u eval()
完成

在列表中,您在数组上循环,然后在第二个索引上使用
ast.literal\u eval
,该索引是字符串
“{APP':True,'FEE':False,'THY':False}”“
然后将其转换为字典。然后创建一个新数组,将第一个元素(字符串
accepted
)放在第一位,然后将新字典放在第二位

注意: 只有当字符串中没有不必要的空格且包含字典时,这才有效。因此,请确保删除此字符串前面的空格
“{APP':True,'FEE':False,'THY':False}”
,并将其更改为
“{APP':True,'FEE':False,'THY':False}”

import ast

data = [
    ["accepted", "{'APP': True , 'FEE': False, 'THY': False}"],
    ["change accepted", "{'APP': True , 'FEE': False, 'THY': False}"],
]

data_ = [[d[0], ast.literal_eval(d[1])] for d in data]
print(data_)
输出:

[['accepted', {'APP': True, 'FEE': False, 'THY': False}], ['change accepted', {'APP': True, 'FEE': False, 'THY': False}]]
[['accepted', {'APP': True, 'FEE': False, 'THY': False}], ['change accepted', {'APP': True, 'FEE': False, 'THY': False}]]