Another iterator method: .itertuples()

Writing Efficient Python Code

Logan Thomas

Scientific Software Technical Trainer, Enthought

Team wins data

print(team_wins_df)
     Team  Year    W
0     ARI  2012   81
1     ATL  2012   94
2     BAL  2012   93
3     BOS  2012   69
4     CHC  2012   61
...
Writing Efficient Python Code
for row_tuple in team_wins_df.iterrows():
    print(row_tuple)
    print(type(row_tuple[1]))
(0, Team     ARI
Year    2012
W         81
Name: 0, dtype: object)
<class 'pandas.core.series.Series'>

(1, Team     ATL
Year    2012
W         94
Name: 1, dtype: object)
<class 'pandas.core.series.Series'>
...
Writing Efficient Python Code

Iterating with .itertuples()

for row_namedtuple in team_wins_df.itertuples():
    print(row_namedtuple)
Pandas(Index=0, Team='ARI', Year=2012, W=81)
Pandas(Index=1, Team='ATL', Year=2012, W=94)
...
print(row_namedtuple.Index)
1
print(row_namedtuple.Team)
ATL
Writing Efficient Python Code

Comparing methods

%%timeit
for row_tuple in team_wins_df.iterrows():
    print(row_tuple)
527 ms ± 41.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
for row_namedtuple in team_wins_df.itertuples():
    print(row_namedtuple)
7.48 ms ± 243 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Writing Efficient Python Code
for row_tuple in team_wins_df.iterrows():
    print(row_tuple[1]['Team'])
ARI
ATL
...
for row_namedtuple in team_wins_df.itertuples():
    print(row_namedtuple['Team'])
TypeError: tuple indices must be integers or slices, not str
for row_namedtuple in team_wins_df.itertuples():
    print(row_namedtuple.Team)
ARI
ATL
...
Writing Efficient Python Code

Let's keep iterating!

Writing Efficient Python Code

Preparing Video For Download...