首页 文章

使用两个相邻的预测值和实际值列创建Pandas数据帧

提问于
浏览
3

我是初学者,我正在使用python中的statsmodel.formula.api.OLS()函数构建线性回归模型 . 我适合训练数据的模型,并在y_test(我的测试数据)上使用predict()函数来获得我的预测值 . 我将预测值存储在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数组转换为数据帧,然后使用连接到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 是第二个参数,你需要以某种方式告诉大熊猫它应该包含在数据中 . 否则,您只传递一个列表作为数据,并且您有两个列名称 - 因此您有错误 . 将两个列表作为两列传递的简单方法是使用字典:

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

相关问题