Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试循环遍历股票价格收盘时出现Python错误_Python_Pandas_Loops_For Loop - Fatal编程技术网

尝试循环遍历股票价格收盘时出现Python错误

尝试循环遍历股票价格收盘时出现Python错误,python,pandas,loops,for-loop,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=

我正试图循环浏览股票价格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())
以下是错误:

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'
runfile('C:/Users/Joe Shiafa Pierce/.spyder-py3/portfolio.py',wdir='C:/Users/Joe Shiafa Pierce/.spyder-py3')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('C:/Users/Joe Shiafa Pierce/.spyder-py3/portfolio.py',wdir='C:/Users/Joe Shiafa Pierce/.spyder-py3')
文件“C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercurcstomize.py”,第786行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercurcstomize.py”,第110行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Joe Shiafa Pierce/.spyder-py3/portfolio.py”,第34行,在
股票指数['Norm return']=股票指数['Adj Close']/股票指数iloc[0]['Adj Close']
文件“C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site packages\pandas\core\series.py”,第868行,在\uu getitem中__
结果=self.index.get_值(self,key)
文件“C:\Users\Joe Shiafa Pierce\Anaconda3\lib\site packages\pandas\core\index\datetimes.py”,第958行,在get\U值中
升起钥匙错误(钥匙)
KeyError:“调整关闭”
我不得不将IICSV中的“Adjusted_close”标题更改为“Adj close”,因为它来自另一个数据集,并且for循环无法使用不同的列标题。谢谢你的帮助


假设这些系列的列名为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

您能显示您的df吗?其中一个数据帧中没有该键,我想Peerror:无法使用这些索引器对其进行索引[0]尝试您的解决方案并得到以下结果:^^