我们如何组合多个csv文件并在同一图表上绘制预测值和实际值

时间:2017-08-05 13:39:45

标签: python python-3.x pandas csv plot

我们希望在使用RandomForestRegressor作为数据科学讲座作业的一部分拟合模型后,在同一图表中绘制实际值和预测值。我们正在考虑的两个数据集可在以下链接中找到

https://drive.google.com/open?id=0B4Ajk8jbXM4TkdTeDQ

我们的解决方案和尝试绘制值如下所示

import pandas as pd
import numpy as np



import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 


df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "testdata*.csv"))))
#df = pd.read_csv('testdata1.csv')

for i in range(1,3):
    df['X_t'+str(i)] = df['X'].shift(i)

print(df)

df.dropna(inplace=True)




X = df.drop('Y', axis=1)


modelPred_test = reg.predict(X_test)
ax.plot(pd.Series(index_values), y_test.values)

plotsInOne=pd.DataFrame(pd.concat([pd.Series(modelPred_test), pd.Series(y_test.values)], axis=1))


plt.figure(); plotsInOne.plot(); plt.legend(loc='best')

当我只选择一个数据集时 df = pd.read_csv('testdata1.csv')并应用如上所示的绘图命令 - 它完全正常

但是,如果我将两个数据集合并为

df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "testdata*.csv"))))

并应用绘图命令,它似乎不将数据集视为一个,并在单个绘图中生成两行,如下所示。我们在以下行中有两个线图的原因是因为plot命令正在处理this link中找到的testdata1.csvtestdata2.csv,即使它们被组合(连接或连接排序)使用df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "testdata*.csv"))))

我们如何解决这个问题?提前谢谢。

2 个答案:

答案 0 :(得分:0)

只需连接然后对新数组进行排序,使其具有上升的x轴。 另一种方法是使用点来绘制而不是用线。

答案 1 :(得分:0)

为了实现这一点,我相信您必须设置ignore_index=True,如下所示。

df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "testdata*.csv"))),ignore_index=True)

希望这有帮助。