Why am I getting the "stop iteration" error and how do I fix this?

8.7k views Asked by At
  1. I get the StopIteration error when I run the code below. I saw some other posts on stack overflow with this same error but not sure they fit this case. Why is this happening and how do I fix it? The goal is to break up a dataframe column into chunks of n = 15,000.

  2. Also I know the last line is redundant. I read something on Stack Overflow that seemed to suggest the next() part needs to be in a for loop. Would this fix the StopIteration issue? And if so, would that for loop be a separate function or can I put it within the code below? I tried the the latter but haven't been successful.

def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n]
        
outputs = chunks(df['Delay Comment'] ,15000)
c15k,c30k,c45k,c60k,c75k,c90k,c105k,c120k,c135k,c150k,c165k,c180k,c195k,c210k,c225k,c240k,c255k,c270k,c285k,c300k,c315k,c330k = next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs)
Error: ---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
C:\Users\HECTOR~1.HER\AppData\Local\Temp/ipykernel_9116/1126382813.py in <module>
      5 
      6 outputs = chunks(df['Delay Comment'] ,15000)
----> 7 c15k,c30k,c45k,c60k,c75k,c90k,c105k,c120k,c135k,c150k,c165k,c180k,c195k,c210k,c225k,c240k,c255k,c270k,c285k,c300k,c315k,c330k = next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs), next(outputs)

StopIteration: 
1

There are 1 answers

0
Tim Peters On

The exception has nothing in particular to do with dataframes. It's what happens if you try to extract more data from any iterator that's already finished its life:

>>> def f():
...     yield 1
...     yield 2
>>> output = f()
>>> next(output)
1
>>> next(output)
2
>>> next(output)
Traceback (most recent call last):
...
StopIteration
>>>