IndexError: один позиционный индексатор выходит за рамки моего кадра данных Pandas - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь выполнить определенную операцию добавления к столбцам в моем фрейме данных, а затем сохранить значения в том же фрейме данных. Мой DataFrame содержит 3796 строк и 11 столбцов, содержащих данные за период с 1928 по 2000 год, с недельными данными. Я хочу взять средневзвешенное значение точек данных (в зависимости от их дат) и сохранить значения в одном и том же кадре данных. Мой код выглядит следующим образом:

    import pandas as pd
    import numpy as np
    df=pd.read_excel("D:\\SUMMER INTERNSHIP CONCORDIA\\Updated Work 
    here\\Kitsim Reservoir (Number 220)\\Book3_Final.xlsx")   
    a=0
    b=0
    k=20
    p=3
    for z in range(3,11):
     a=0
     b=0
     for x in range(1928,2000):
      for y in range(0,12):
        if df.iloc[a,1]==1:
            df.iloc[b,k]=(7*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
            a=a+4
            b=b+1
        if df.iloc[a,1]==2:
            df.iloc[b,k]=(4*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/28
            a=a+4
            b=b+1
        if df.iloc[a,1]==4:
            df.iloc[b,k]=(1*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+7*df.iloc[a+4,z]+6*df.iloc[a+5,z])/30
            a=a+5
            b=b+1
        if df.iloc[a,1]==3:
            df.iloc[b,k]=(4*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+6*df.iloc[a+4,z])/31
            a=a+4
            b=b+1
        if df.iloc[a,1]==5:
            df.iloc[b,k]=(3*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+6*df.iloc[a+4,z])/31
            a=a+4
            b=b+1
        if df.iloc[a,1]==6:
            df.iloc[b,k]=(3*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+6*df.iloc[a+4,z])/30
            a=a+4
            b=b+1
        if df.iloc[a,1]==7:
            df.iloc[b,k]=(1*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+7*df.iloc[a+4,z]+2*df.iloc[a+5,z])/31
            a=a+5
            b=b+1
        if df.iloc[a,1]==8:
            df.iloc[b,k]=(5*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+5*df.iloc[a+4,z])/31
            a=a+4
            b=b+1
        if df.iloc[a,1]==9:
            df.iloc[b,k]=(2*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+7*df.iloc[a+4,z])/30
            a=a+5
            b=b+1
        if df.iloc[a,1]==10:
            df.iloc[b,k]=(7*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
            a=a+4
            b=b+1
        if df.iloc[a,1]==11:
            df.iloc[b,k]=(4*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+5*df.iloc[a+4,z])/30
            a=a+4
            b=b+1
        if df.iloc[a,1]==12:
            df.iloc[b,k]=(2*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
            a=a+5
            b=b+1
     k=k+1
     p=p+1

Отображаемая ошибка:

    D:\anaconda\lib\site-packages\pandas\core\indexing.py in 
   _is_valid_integer(self, key, axis)
     1540         l = len(ax)
     1541         if key >= l or key < -l:
  -> 1542             raise IndexError("single positional indexer is out-of- 
     bounds")
     1543         return True
     1544 

     IndexError: single positional indexer is out-of-bounds

Я прочитал ответ, в котором говорилось, что это может быть из-за того, что у меня недостаточно столбцов для хранения моего значения, для того же самого я создал 50 пустых столбцов в кадре данных, но ошибка все равно была той же. Я также хотел бы отметить, что когда я пытаюсь,

    a=0
    b=0
    k=20
    z=3
    df.iloc[b,k]=(7*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
    a=a+4
    b=b+1

в отдельной ячейке (без петли), работает совершенно нормально. Как мне теперь поступить!?

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