我有一个看起来像
的test.csv文件Company Year Actual Predicted
A 2010 500 700
A 2011 600 650
A 2012 700 690
B 2010 800 590
B 2011 670 800
B 2012 570 600
我想明智地绘制曲线。
这意味着该数据集将有两条曲线;一个用于公司A,另一个用于公司B。我希望曲线看起来像这样
我是python的新手,所以我需要帮助。
我尝试了此代码
import matplotlib.pyplot as plt
import csv
Year=[]
Prediction=[]
Actual=[]
with open('C:\\Users\\Dell\\Desktop\\New Beginnings\\financial\\test1.csv','r') as csvfile:
plots =csv.reader(csvfile,delimiter=',')
for column in plots:
Year.append(int(column[1]))
Prediction.append(int(column[3]))
Actual.append(int(column[2]))
plt.plot(Year,Prediction,Actual ,label='Loaded from file!')
plt.xlabel('Year')
plt.ylabel('Predicted')
plt.ylabel('Actual')
plt.title('Share Market Price')
plt.legend()
plt.show()
但是此代码存在一些问题。
首先是我遇到此错误ValueError: invalid literal for int() with base 10: 'Predicted'
第二,我没有添加任何代码来分开公司的明智绘图。
有人可以编辑以下代码吗?感谢您的帮助。
答案 0 :(得分:0)
您可以执行
next(csvfile)
在分配plots
之前,跳过列标题的初始行。
如您所见,将文本标题转换为int
无效。
定义一个功能:
def plot_actual_and_predicted(company, filename):
将大部分代码放入该函数中。 现在插入一个测试,以便您的循环如下所示:
for column in plots:
if column[0] == company:
Year.append(int(column[1]))
Prediction.append(int(column[3]))
Actual.append(int(column[2]))
调用函数两次以获得一对图:
plot_actual_and_predicted('A', filename)
plot_actual_and_predicted('B', filename)
每次通话只会提取公司特定的数据片段,
类似于执行$ egrep '^A,' *.csv
或删除以B
开头的行。