![](/img/trans.png)
[英]Why it returns IndexError: list index out of range when index exists?
[英]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.