Pandas:将特征向量从字典列表导入datafram

2024-10-02 10:32:42 发布

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

我有一个字典列表,每个字典由两个键值元组组成。第一个关键值是一个人的名字,第二个是一个特征向量,由每个人在不同课程中取得的成绩组成。例如:

ListOfGrades=[{'Name':"Mike", 'grades':[98,86,90,72]},{'Name':"Sasha", 'grades':[92,79,85,94]},{'Name':"Beth", 'grades':[89,89,76,90]}] 

我想将这些数据导入到一个pandas数据框中,这样每一行都有一个人名的标签,每一列都填充了他们的成绩。简而言之,我需要这样的东西:

^{pr2}$

我知道我应该用pd数据帧(等级列表),但我不知道如何设置它来达到我的目的。我见过Convert list of dictionaries to Dataframe,但它与我在数据帧中对数据排序的方式不同。 我试过了:

for i in ListOfGrades:
    ListOfGrades[i]=str(ListOfGrades[i]['grades'])

# Convert to dataframe
df = pd.DataFrame.from_dict(ListOfGrades, orient='index').reset_index()

但是,python给了我一个错误:

 ListOfGrades[i]=str(ListOfGrades[i]['grades'])
 TypeError: list indices must be integers, not dict 

另外,我不知道如何将名字添加到每一行,这样数据框的第一列由人名组成,就像我想要的数据框外观一样(如上所示)。感谢任何帮助!在


Tags: to数据nameconvert列表index字典名字
3条回答

好吧,这种方法有点麻烦,如果每个学生的分数不一样,它很快就会遇到问题,但本质上,你需要建立一个新的列表,并从该列表创建字典。对于python 3.5:

new_list = []
for student in ListOfGrades:
    new_list.append({'Name': student['Name'], **{'grade_'+str(i+1): grade for i, grade in enumerate(student['grades'])}})

df = pd.DataFrame(new_list)

这是我得到的数据帧:

^{pr2}$

如果python的python版本不可用,那么应该有python.3版本:

new_list = []
for student in ListOfGrades:
    new_list.append(dict(Name = student['Name'], **{'grade_'+str(i+1): grade for i, grade in enumerate(student['grades'])}))

df = pd.DataFrame(new_list)

编辑后添加:上面的内容也适用于Python2.7

试试这个。。在

df  = pd.DataFrame.from_records(ListOfGrades, index='Name')['grades'].apply(pd.Series)
df

#         0   1   2   3
# Name                 
# Mike   98  86  90  72
# Sasha  92  79  85  94
# Beth   89  89  76  90

向列表添加数据:

^{pr2}$

出现错误的原因是i已经是列表中的一个项(在本例中是字典),而不是索引。为了更好地工作,你可以改变你的循环如下

for i in range(len(ListOfGrades)):

这将使i成为一个适当的索引。然而,正如我在前面的评论中提到的,可能有更实际的方法来解决这个问题,比如有一个字典,其中键是名称,值是等级列表。这意味着你不需要字典列表。在

相关问题 更多 >

    热门问题