【问题标题】:Summarize Loop Results in Pandas Table在 Pandas 表中总结循环结果
【发布时间】:2020-03-27 06:44:19
【问题描述】:

我得到了下载代码并为下载列表中的每只股票运行线性回归的代码。我被困在最后一步:在数据中的最后一个日期显示每只股票的预测和残差值。

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

【问题讨论】:

    标签: python pandas loops linear-regression


    【解决方案1】:

    您可以执行以下操作,将值存储在列表中:

    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))
    

    【讨论】:

    • 优秀。谢谢
    • @user10425666 如果可行,请考虑接受答案,谢谢!
    • 我刚做了。它是否显示为已接受。抱歉,由于某种原因,它昨天没有工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2022-01-25
    • 2011-07-06
    • 2013-12-11
    • 2013-04-22
    相关资源
    最近更新 更多