IndexError:我的Pandas Dataframe

时间:2018-06-29 16:58:02

标签: python python-3.x pandas anaconda pandas-groupby

我正在尝试对数据框中的列执行某些加法运算,然后将值存储在同一数据框中。我的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

我读到一个答案,它可能是因为我没有足够的列来存储我的值,同样,我在Dataframe中创建了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

在一个单独的单元格中(没有循环),它完全可以正常工作。我现在应该如何进行!!

0 个答案:

没有答案