创建一个带有预测值和实际值相邻两列的Pandas数据框。

3

我是一个初学者,正在使用python中的statsmodel.formula.api.OLS()函数构建线性回归模型。我对训练数据拟合模型,并使用predict()函数在y_test(我的测试数据)上进行预测以获取预测值。我将预测值存储在y_pred中。

import statsmodels.formula.api as sm
result = sm.OLS(y_train, train_new).fit()   
y_pred = result.predict(test_new)

当我尝试打印y_pred时,它以numpy数组的形式出现,而y_test是以pandas数据框格式呈现的。
 In[44]: type(y_pred)
 Out[44]: numpy.ndarray

 In[45]:type(y_test)
 Out[45]: pandas.core.series.Series

我希望创建一个新的Pandas数据框,其中y_test是一列,y_pred是另一列,相邻地放置在一起,并将其存储到csv文件中,以便更容易地在相邻的列中进行比较。但是,当我尝试时

pd.DataFrame(y_pred, y_test, columns=['predictions', 'actual']).to_csv('prediction.csv')

我理解了

ValueError: Shape of passed values is (1, 5039), indices imply (2, 5039)

当我试图将y_pred数组转换为数据框,然后使用concatenate将其与y_test数据框连接时,出现了问题。

pd.concat([df1, df2], axis=1)

我得到了一个空列,其中包含y_test的空单元格,相邻于y_pred值。无论我尝试什么,我都无法产生一个具有实际和预测值两个相邻列的数据框/CSV文件。你们有什么建议?
1个回答

2
pd.DataFrame(y_pred, y_test, columns=['predictions', 'actual']).to_csv('prediction.csv')

如果您查看pd.DataFrame的参数,您会发现上面的行(df构造部分)实际上是:
pd.DataFrame(data=y_pred, index=y_test, columns=['predictions', 'actual'])

这是因为y_test是第二个参数,你需要告诉pandas它应该包含在数据中。否则,你只传递了一个列表作为数据,但你有两个列名 - 所以会报错。将两个列表作为两个列的简单方法是使用字典:

pd.DataFrame(data={'predictions': y_pred, 'actual': y_test})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接