Tryind this code:
f2 = []
for i in symb_list:
f2.append(earnings_vola(i))
Gives the index out of bounds error. Sample of symb_list:
symb_list
Out[143]:
['MTMC',
'ANCI',
'TPLM',
'BERK',
'DGI',
'QLTY',
'GST',
'AGEN',
'NURO',
earnings_vola(i) returns float
UPD. Sorry, im new user here.
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 Example of result earnings_vola(symbol) function:
earnings_vola(symbol='MSFT')
0.080011249349832989**
I need to iterate list of symbols (example above) and get all results in list
The problem comes from this line:
if df['timetype'][2]=='After Close':
And it's complaining that df['timetype']
is a sequence with only 0, 1, or 2 items, but you're asking for the third.
This could be a silly typo of the kind we all make, where you accidentally wrote 2
instead of 1
, or forgot that Python sequences use 0-based indices.
But if not, if you really were expecting df['timetype']
to have 3 or more values and it doesn't, we need to know what values you expected it to have, and why, and what values it actually has.
You can get started on debugging this by just adding a line to your code and running again:
df = h.to_df(d)
print(df['timetype']) # NEW CODE
if df['timetype'][2]=='After Close':
If the result isn't what you expected, try printing out df
itself, or d
or h
, etc., until you find the first place where it goes wrong.
At some point, you'll find the first step that's returning a different value than you expected. You may still have no idea why it's returning a different value—but at that point, you've got a much easier question for StackOverflow to answer.
Change this code
if df['timetype'][2]=='After Close':
price['VOLA'] = (price.shift(-1)['C']-price['C'])/price['C']*100
to this code (explicit, correct and readable)
key = 'timetype'
value = df[key] if df and key in df else None
kw = value[2] if value and len(value) > 2 and value[2]=='After Close' else None
if kw:
price['VOLA'] = (price.shift(-1)['C']-price['C'])/price['C']*100
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.