尝试循环查看股票收盘价时出现 Python 错误

标签 python pandas loops for-loop

我正在尝试循环遍历股票价格 csv,以添加投资组合权重等列,以便构建一个投资组合以在一个数据框中进行分析。然而,当循环时,我收到一个我不明白的错误:

gsk_df = web.DataReader("GSK.L", 'yahoo', start=start, end=end)
ocdo_df = web.DataReader("OCDO.L", 'yahoo', start=start, end=end)
rbs_df = web.DataReader("RBS.L", 'yahoo', start=start, end=end)
svt_df = web.DataReader("SVT.L", 'yahoo', start=start, end=end)
iii_df = pd.read_csv("iii (1).csv", parse_dates=['Date'])

#close of each stock

bp_close = bp_df["Adj Close"]
gsk_close = gsk_df["Adj Close"]
ocdo_close = ocdo_df["Adj Close"]
rbs_close = rbs_df["Adj Close"]
svt_close = svt_df["Adj Close"]
iii_close = iii_df["Adj Close"]


#adding normalised returns for portfolio
for stock_df in (bp_close, gsk_close, ocdo_close, rbs_close, svt_close, iii_close):
    stock_df['Norm return'] = stock_df['Adj Close']/stock_df.iloc[0]['Adj Close']

#adding portfolio weights

for stock_df, allocation in zip((bp_close, gsk_close, ocdo_close, rbs_close, svt_close, iii_close),[.0881,.233,.160,.0776,.304,.137]):
    stock_df['Allocation']=stock_df['Norm return']*allocation
    
#portfolio position value column
for stock_df in (bp_close, gsk_close, ocdo_close, rbs_close, svt_close, iii_close):
    stock_df['Position'] = stock_df['Allocation']*6503800000
    
print(bp_close.head())

这是错误:

KeyError:“调整关闭”

I had to change the "Adjusted_close" heading to "Adj close" in the iii csv as it was from another data set and the for loop would not function with different column headers. Thanks for the help.

[![enter image description here][1]][1]


  [1]: /image/iFv6N.jpg

最佳答案

假设这些系列将 stock 作为列名称,您可以避免循环 通过将它们连接到数据帧中并避免 KeyError

stocks = ['GSK.L', 'OCDO.L', 'RBS.L', 'SVT.L']
df = web.DataReader(stocks, 'yahoo',start,end).reset_index(drop=True)
iii_df = pd.read_csv("iii (1).csv", parse_dates=['Date']) # reset_index if needed

stock_df = pd.concat([df, iii_close], axis=1, ignore_index=True)
stock_df['Norm return'] = stock_df / stock_df.loc[0]
stock_df['Allocation'] = stock_df['Norm return'] * [.0881,.233,.160,.0776,.304,.137]
stock_df['Position'] = stock_df['Allocation'] * 6503800000

关于尝试循环查看股票收盘价时出现 Python 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59043422/

相关文章:

python - float32 的精度

python - 如何找到 Pandas 中两个日期时间之间的差异?

matlab - 转置矩阵的每一行并将结果向量乘以其他矩阵的更快方法?

c++ - 在循环外声明 var 不好吗?

python - 如何在 while 循环中使用用户输入修改矩阵,并在用户输入字符串时中断?

python - Google Cloud Python灵活环境多线程数据库 worker 卡住

python - 使用python和mssql插入特殊字符°

python - 如何在 Python 2.7 中使用 StringIO 解决 TypeError?

python - 推断 Pandas DataFrame 中的值

python - pandas:在循环中创建现有变量的滞后变量