Have you tried to iterate over a DataFrame in Pandas, but got a TypeError: tuple indices must be integers or slices, not str ? If so, we’ll see what is the cause of the error and how to solve it.

1: Create simple DataFrame

To begin lets create simple DataFrame:

df = pd.DataFrame({'num_legs': [4, 2, 0], 'num_wings': [0, 2, 0]},
                  index=['dog', 'hawk', 'fish'])

data:

num_legs num_wings
dog 4 0
hawk 2 2
fish 0 0

2: TypeError: tuple indices must be integers or slices, not str

If we like to iterate row by row and access the row data then we can use method: pandas.DataFrame.iterrows. A common problem for programmers is to not read docs(including me sometimes :) ) and go with solution like:

for row in df.iterrows():
    print(row['num_wings'])

but this leads to the error which is the topic of the article:

TypeError: tuple indices must be integers or slices, not str

3: Solution for TypeError: tuple indices must be integers or slices, not str

Reading the docs of pandas.DataFrame.iterrows we can find that:

Iterate over DataFrame rows as (index, Series) pairs.

which means that usage above is not correct. The correct code and the solution for TypeError: tuple indices is:

for index, row in df.iterrows():

full code:

for index, row in df.iterrows():
    print(row['num_wings'])

now the result is:

0
2
0

4: Analyse similar errors like: TypeError: tuple indices must be integers or slices, not str

I've recommend to you to look at the error more carefully and find the problematic line:

TypeError                                 Traceback (most recent call last)
<ipython-input-18-4ab72df7c78e> in <module>
      1 for row in df.iterrows():
----> 2     print(row['num_wings'])

TypeError: tuple indices must be integers or slices, not str

then start removing or simplifying the line like:

print(row['num_wings']) -> print(row)

and check what happens. Another way is by debugging and using evaluate expression. You can find more advanced techniques for debugging here: PyCharm - Breakpoints, Favorites, TODOs simple examples