简体   繁体   中英

python index out of bounds error

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM