验证码:
f2 = []
for i in symb_list:
f2.append(earnings_vola(i))
给出索引越界错误。symbb_list示例:
symb_list
Out[143]:
['MTMC',
'ANCI',
'TPLM',
'BERK',
'DGI',
'QLTY',
'GST',
'AGEN',
'NURO',
earnings_vola(i)返回float
UPD.对不起,我是新用户.
def earnings_vola (symbol):
price_b = marketdata.ext.load_metotron('%s'%symbol)
price = price_b.sort()
d = pickle.load(open('/home/mad/Appr/data_%s.pickle'%(symbol), 'rb'))
df = h.to_df(d)
if df['timetype'][2]=='After Close':
price['VOLA'] = (price.shift(-1)['C']-price['C'])/price['C']*100
else:
price['VOLA'] = (price['C']-price.shift(+1)['C'])/price['C']*100
x1 = pa.Series(sorted(df['Date_p']))
px = price.reindex(x1, method='ffill')
avg_vola = np.mean(px['VOLA'])
return avg_vola
UPD2
> IndexError Traceback (most recent call
> last) <ipython-input-144-f3de6042c223> in <module>()
> 1 f2 = []
> 2 for i in symb_list:
> ----> 3 f2.append(earnings_vola(i))
>
> <ipython-input-123-96f164ec1ad9> in earnings_vola(symbol)
> 4 d = pickle.load(open('/home/mad/Appr/data_%s.pickle'%(symbol), 'rb'))
> 5 df = h.to_df(d)
> ----> 6 if df['timetype'][2]=='After Close':
> 7 price['VOLA'] = (price.shift(-1)['C']-price['C'])/price['C']*100
> 8 else:
>
> /usr/local/lib/python2.7/dist-packages/pandas/core/series.pyc in
> __getitem__(self, key)
> 616 def __getitem__(self, key):
> 617 try:
> --> 618 return self.index.get_value(self, key)
> 619 except InvalidIndexError:
> 620 pass
>
> /usr/local/lib/python2.7/dist-packages/pandas/core/index.pyc in
> get_value(self, series, key)
> 728
> 729 try:
> --> 730 return tslib.get_value_box(series, key)
> 731 except IndexError:
> 732 raise
>
> /usr/local/lib/python2.7/dist-packages/pandas/tslib.so in
> pandas.tslib.get_value_box (pandas/tslib.c:8534)()
>
> /usr/local/lib/python2.7/dist-packages/pandas/tslib.so in
> pandas.tslib.get_value_box (pandas/tslib.c:8378)()
>
> IndexError: index out of bounds
**UPD3结果earnings_vola(symbol)函数示例:
earnings_vola(symbol='MSFT')
0.080011249349832989**
我需要迭代列表的符号(上面的例子),并得到所有结果列表
2条答案
按热度按时间nlejzf6q1#
问题来自这一行:
它抱怨
df['timetype']
是一个只有0、1或2项的序列,但你要求第三项。这可能是我们都会犯的那种愚蠢的错别字,你不小心写了
2
而不是1
,或者忘记了Python序列使用从0开始的索引。但是如果不是,如果你真的期望
df['timetype']
有3个或更多的值,而它没有,我们需要知道你期望它有什么值,为什么,以及它实际上有什么值。你可以通过在代码中添加一行代码并再次运行来开始调试:
如果结果不是您所期望的,请尝试打印出
df
本身,或者d
或h
等,直到您找到第一个出错的地方。在某些时候,您会发现第一步返回的值与您预期的不同。您可能仍然不知道 * 为什么 * 它返回一个不同的值-但在这一点上,StackOverflow有一个更容易回答的问题。
3htmauhk2#
更改此代码
此代码(明确,正确和可读)