在选项卡中汇总循环结果

2024-04-23 23:13:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到的代码,下载股票和运行的线性回归为每个股票在下载的名单。我被困在最后一步:显示预测&;数据中最后一天每只股票的剩余价值

import pandas as pd
import numpy as np
import yfinance as yf
import datetime as dt
from sklearn import linear_model

tickers = ['EXPE','MSFT']

data = yf.download(tickers, start="2012-04-03", end="2017-07-07")['Close']
data = data.reset_index()
data = data.dropna()

df = pd.DataFrame(data, columns = ["Date"])
df["Date"]=df["Date"].apply(lambda x: x.toordinal())

for ticker in tickers:
   data[ticker] = pd.DataFrame(data, columns = [ticker])
   X = df
   y = data[ticker]
   lm = linear_model.LinearRegression()
   model = lm.fit(X,y)
   predictions = lm.predict(X)
   residuals = y-lm.predict(X)
   print (predictions[-1:])
   print(residuals[-1:])

电流输出如下所示:

[136.28856636]
1323    13.491432
Name: EXPE, dtype: float64
[64.19943648]
1323    5.260563
Name: MSFT, dtype: float64

但我希望它像这样展示(作为熊猫表):

        Predictions Residuals
EXPE    136.29      13.49
MSFT    64.20       5.26

Tags: importdfdatadatemodelaspd股票
1条回答
网友
1楼 · 发布于 2024-04-23 23:13:03

您可以这样做,将值存储在列表中:

import pandas as pd
import numpy as np
import yfinance as yf
import datetime as dt
from sklearn import linear_model

tickers = ['EXPE','MSFT']

data = yf.download(tickers, start="2012-04-03", end="2017-07-07")['Close']
data = data.reset_index()
data = data.dropna()

df = pd.DataFrame(data, columns = ["Date"])
df["Date"]=df["Date"].apply(lambda x: x.toordinal())

predictions_output = []
residuals_output = []

for ticker in tickers:
    data[ticker] = pd.DataFrame(data, columns = [ticker])
    X = df
    y = data[ticker]
    lm = linear_model.LinearRegression()
    model = lm.fit(X,y)
    predictions = lm.predict(X)
    residuals = y-lm.predict(X)
    predictions_output.append(float(predictions[-1:]))
    residuals_output.append(float(residuals[-1:]))


expectation_df = pd.DataFrame(list(zip(predictions_output, residuals_output)), 
               columns =['Predictions', 'Residuals']).set_index([tickers])
print(expectation_df)

输出为:

      Predictions  Residuals
EXPE   136.288566  13.491432
MSFT    64.199436   5.260563

编辑:我走得太快,回头看时发现tickers已经定义好了,所以您可以用它在这里设置索引,并丢失Tickers索引标题以匹配所需的输出

另外,如果您想对这些值进行舍入,可以在循环中添加以下两行:

predictions_output.append(round(float(predictions[-1:]), 2))
residuals_output.append(round(float(residuals[-1:]), 2))

相关问题 更多 >