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

How to build a multiclass list from a csv in Python?

我正在尝试基于这样的数据框构建列表

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=";")

但是,如标题所述,我需要构建一个列表,将 class 列作为 object 而不是文本。我用这句话创建了列表:

newList = df.values.tolist()
newList

但是,结果不是预期的:

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

可以看出,列表的第二个“列”被转换成了String。我需要的是这个(没有“):

[['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_eval().

来完成

在列表推导式 data_ 中,您遍历数组,然后在第二个索引上使用 ast.literal_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}]]