IndexError: индекс 6 выходит за пределы оси 0 с размером 6 - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь l oop по парам элементов в кортежах, выполнить запрос Postgres и затем добавить данные в DataFrame. Мой код выглядит следующим образом:

import pandas as pd

# Download and import WRDS, using pip if required

try:
   import wrds
except ImportError:
   !pip install wrds
   import wrds

# Connect to wrds
conn = wrds.Connection()

fd_list_most =tuple(["2013-03-01", "2013-03-03", "2013-03-19", "2013-01-29", "2013-03-28", "2013-02-22", "2013-02-27", "2013-03-14", "2013-03-01", "2013-03-18"]);

mcl1=pd.merge(most_cons_list[['gvkey','datadate','bkvlps', 'cik']],mcl,how='left',on=['gvkey'])
print(mcl1);

Выход mcl1:

    gvkey    datadate   bkvlps         cik  permco
0  008007  2013-12-31  29.0228  0000072971   21305
1  028278  2013-12-31  15.1899  0000714395   12139
2  111940  2013-12-31  13.6911  0000765207   16649
3  157955  2013-12-31  28.0769  0001273813   45077
4  180169  2013-12-31  10.4775  0001390312   53031
5  184167  2013-12-31  18.1538  0000860413   53368
# Loop over each pair of filing date and CIK and retrieve stock price for 7 days either side of filing date

mcl2=pd.DataFrame();


for i in range(len(fd_list_most)):
    stmt3="""
    select permco, ret, retx, date(date) as date
    FROM crsp.dsf
    where permco= {}
    and  date < date '{}' + integer '7'
    and date > date '{}' - integer '7'
    """.format(mcl['permco'].values[i],fd_list_most[i],fd_list_most[i])
    mcl2=mcl2.append(conn.raw_sql(stmt3))

print(mcl2)

Ошибка:

IndexError                                Traceback (most recent call last)
<ipython-input-37-31f1dfe1daea> in <module>
     11     and  date < date '{}' + integer '7'
     12     and date > date '{}' - integer '7'
---> 13     """.format(mcl['permco'].values[i],fd_list_most[i],fd_list_most[i])
     14     mcl2=mcl2.append(conn.raw_sql(stmt3))
     15 

IndexError: index 6 is out of bounds for axis 0 with size 6

Это пример кода от репетитора, который отлично работает с данными, которые он ввел, но не с моими. Я вижу, что есть проблема с длиной моего индекса, но я не уверен, как ее решить. Буду благодарен за любую помощь. Я новичок, поэтому не всегда понимаю более сложные решения. Я посмотрел на этот вопрос, и имел go на эти IndexError: индекс 1 выходит за границы для оси 0 с размером 1 / ForwardEuler , индекс 100 выходит за границы для ось 0 с размером 100 , но они не сработали для меня, возможно, потому что я не понимаю, как применить решения к моей проблеме. Спасибо

1 Ответ

0 голосов
/ 17 января 2020

Ваш DataFrame выглядит так, как будто в нем всего 6 записей, в то время как вы перебираете кортеж, в котором больше. В вашем операторе for вы можете просто изменить его на итерацию по строкам mc12.

. Я не люблю рекомендовать использовать df.iterrows(), но в этом случае это выглядит как хорошая подгонка , Проверьте здесь: df.iterrows ()

Кроме того, вы уверены, что это утверждение делает то, что вы ожидаете? mcl2=mcl2.append(conn.raw_sql(stmt3)). Вы не писали об этом, поэтому я не буду обсуждать это здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...