CSV数据中的Python饼图

时间:2018-01-02 13:04:25

标签: python csv numpy matplotlib

我有一个包含3列的.csv文件,我必须将其读入Python并转换为饼图。

如果我手动创建数据列表,我就设法制作了一个饼图,但我仍然坚持将.csv中的数据读入python。

import numpy as np
import matplotlib.pyplot as plt
import csv

outfile = open("vote_results.csv","r")

file=csv.reader(outfile)
#skip the headers
next(file, None)

Party = []
Seats = []
Votes = []

for row in file:
    Party = row[0]
    Seats = row[1]
    Votes = row[2]

plt.pie(Votes, labels=Party)
plt.show()

我一直在:

TypeError: "Object of type 'numpy.float64' has no len()"

我认为是由于有标题而已经尝试了

next(file, None)

删除它们但仍然收到错误。

CSV文件看起来像

Party      Seats       Votes

Party1      50           1000

Party2      41           680

Party3      32           481

screenshot of console output

screenshot of .csv file

1 个答案:

答案 0 :(得分:2)

问题来自您尝试存储数据的方式。您已使用Party = []初始化了一个空列表,但随后将名为Party的变量覆盖为row[0]的结果。因此,当您尝试绘制饼图时,您尝试绘制的列表中只有一个数字。

解决方案是使用my_list.append(value)将项目追加到您的列表中。此外,我不确定它是否是拼写错误,但您需要plt.show()之后的括号。

请注意,根据PEP8,变量名称应以小写字母开头。

您还可以添加plt.axis('equal')以使评论中的@Dan建议使饼图变为圆形。

因此,您的示例将变为:

outfile = open("vote_results.csv","r")

file=csv.reader(outfile)
next(file, None)

party = []
seats = []
votes = []

for row in file:
    party.append(row[0])
    seats.append(row[1])
    votes.append(row[2])

plt.pie(votes, labels=party)
plt.axis('equal') # make the pie chart circular
plt.show()

使用样本数据给出:

enter image description here