簡體   English   中英

IndexError:在python中列出索引超出范圍,即使范圍存在

[英]IndexError: list index out of range when in python, even when the range exists

我確信我嘗試訪問的范圍存在,但仍然,程序顯示錯誤。 我正在嘗試創建一個程序,該程序將總結與另一列中的值對應的列中的值。

例如:

   28400    4
   28400    34 
   28400    9
   65478    2
   65478    5
   65478    3

我的程序將做的是,它將加起來4,34和9然后它將加起來2,5和3然后跟隨將輸出 -

   47
   47
   47
   10
   10
   10  

我正在從CSV文件導入數據。 以下是代碼 -

    import pandas as pd
    import numpy as np

    assessment = pd.read_csv('/home/user/Documents/MOOC dataset original/studentVle2.csv')


    assessment = assessment.values

    count=0
    stucount=28400
    sumc=[]
    i=0
    for stu in assessment[:,2:3]:
        if(stucount==stu):
            count = count + assessment[i,5]
            i=i+1
        else:
            sumc.append(count)
            count = 0
            count = count + assessment[i,5]
            i=i+1
        stucount=stu

    #print(sumc)

    stucount=28400
    i=0
    a=[]
    for stu in assessment[:,2:3]:
        if(stucount==stu):
            a.append(sumc[i])
            stucount = stu
        else:
            i=i+1
            a.append(sumc[i])
            stucount = stu

    print(a)

錯誤:

        File "/home/user/Documents/final project files/test.py", line 36, in <module>
        a.append(sumc[i])
        IndexError: list index out of range

順便說一句,在添加一些行之前,比如i = i + 1,stucount = stu這個錯誤沒有顯示,但是現在它顯示了即使發生的事情是相同的。

該錯誤是因為您沒有在循環結束后為最后一個學生的sumc列表添加評估值。 因此,對於n唯一的學生ID,列表長度僅為n-1 for循環之后,添加sumc.append(count) 見下文。

assessment = assessment.values

count=0
stucount=28400
sumc=[]
i=0
for stu in assessment[:,2:3]:
    if(stucount==stu):
        count = count + assessment[i,5]
        i=i+1
    else:
        sumc.append(count)
        count = 0
        count = count + assessment[i,5]
        i=i+1
    stucount=stu

sumc.append(count)
print(sumc)

stucount=28400
i=0
a=[]
for stu in assessment[:,2:3]:
    if(stucount==stu):
        a.append(sumc[i])
        stucount = stu
    else:
        a.append(sumc[i])
        stucount = stu
        i=i+1

print(a)

i=i+1置於stucount = stu下方,然后嘗試

import pandas as pd
import numpy as np

assessment = pd.read_csv('/home/user/Documents/MOOC dataset original/studentVle2.csv')


assessment = assessment.values

count=0
stucount=28400
sumc=[]
i=0
for stu in assessment[:,2:3]:
    if(stucount==stu):
        count = count + assessment[i,5]
        i=i+1
    else:
        sumc.append(count)
        count = 0
        count = count + assessment[i,5]
        i=i+1
    stucount=stu

#print(sumc)

stucount=28400
i=0
a=[]
for stu in assessment[:,2:3]:
    if(stucount==stu):
        a.append(sumc[i])
        stucount = stu
    else:
        a.append(sumc[i])
        stucount = stu
        i=i+1

print(a)

輸出將不同並相應更改....將刪除錯誤

在這里,我只是按照您最初的問題陳述來了解您擁有的和您想要獲得的內容。

df = pd.DataFrame([[28400,4],
                   [28400,34],
                   [28400,9],
                   [65478,2],
                   [65478,5],
                   [65478,3]], columns=list('AB'))
sums = df.groupby('A').B.sum()
df.A.map(sums)

你得到了

0    47
1    47
2    47
3    10
4    10
5    10
Name: A, dtype: int64

這是你在找什么?

我想你應該在錯誤行a.append(sumc[i])之后添加i=i+1 因為在你的代碼中,最后可能會超出列表范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM