Вы правы в том, что касается корня проблемы.Но я не думаю, что диапазон пересчитывается.Но поскольку вы удаляете первые значения из списка, i
превзойдет остальные columnstokeep
.Я добавил несколько отпечатков, чтобы показать проблему более четко:
years = range(1990,2010)
columnstokeep=[]
#The column names kind of
for i in years:
columnstokeep.append(str(i)+'-01')
##This shows the error comment this
for i in range(len(columnstokeep)-1): #get rid of dates before year 2000
print(i,columnstokeep[i])#It prints every second year while in 199X
if int(columnstokeep[i][:4])<2000:
columnstokeep.remove(columnstokeep[i])
Вместо этого вы можете выполнять итерацию с конца до начала ....
for i in range(len(columnstokeep)-1,-1,-1): #get rid of dates before year 2000
print(i,columnstokeep[i])#It prints every second year while in 199X
if int(columnstokeep[i][:4])<2000:
columnstokeep.remove(columnstokeep[i])
#DF = DF[columnstokeep] #the new dataframe
print(columnstokeep)
вывод:
['2000-01', '2001-01', '2002-01', '2003-01', '2004-01', '2005-01', '2006-01', '2007-01', '2008-01', '2009-01']