【发布时间】:2020-03-21 10:17:40
【问题描述】:
我正在尝试遍历股票价格 csvs,以添加诸如投资组合权重等列,以便构建一个投资组合以在一个数据框中进行分析。然而,当循环时,我得到一个我不明白的错误:
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())
这是错误:
runfile('C:/Users/Joe Shiafa Pierce/.spyder-py3/portfolio.py', wdir='C:/Users/Joe Shiafa Pierce/.spyder-py3')
Traceback (most recent call last):
File "<ipython-input-82-6a3db40a9a10>", line 1, in <module>
runfile('C:/Users/Joe Shiafa Pierce/.spyder-py3/portfolio.py', wdir='C:/Users/Joe Shiafa Pierce/.spyder-py3')
File "C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
execfile(filename, namespace)
File "C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Joe Shiafa Pierce/.spyder-py3/portfolio.py", line 34, in <module>
stock_df['Norm return'] = stock_df['Adj Close']/stock_df.iloc[0]['Adj Close']
File "C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site-packages\pandas\core\series.py", line 868, in __getitem__
result = self.index.get_value(self, key)
File "C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site-packages\pandas\core\indexes\datetimes.py", line 958, in get_value
raise KeyError(key)
KeyError: 'Adj Close'
我不得不将 iii csv 中的“Adjusted_close”标题更改为“Adj close”,因为它来自另一个数据集,并且 for 循环无法使用不同的列标题。感谢您的帮助。
【问题讨论】:
-
你能展示你的df吗?
-
我想其中一个数据框没有那个键
标签: python pandas loops for-loop