iterate over pandas dataframe using itertuples

Question:

I am iterating over a pandas dataframe using itertuples. I also want to capture the row number while iterating:

for row in df.itertuples():
    print row['name']

Expected output :

1 larry
2 barry
3 michael

1, 2, 3 are row numbers. I want to avoid using a counter and getting the row number. Is there an easy way to achieve this using pandas?

Asked By: Sun

||

Answers:

When using itertuples you get a named tuple for every row. By default, you can access the index value for that row with row.Index.

If the index value isn’t what you were looking for then you can use enumerate

for i, row in enumerate(df.itertuples(), 1):
    print(i, row.name)

enumerate takes the place of an ugly counter construct

Answered By: piRSquared
for row in df.itertuples():
    print(getattr(row, 'Index'), getattr(row, 'name'))
Answered By: Ashok Kumar Pant

For column names that aren’t valid Python names, use:

for i, row in enumerate(df.itertuples(index=False)):
    print(str(i) + row[df.columns.get_loc('My nasty - column / name')])

If you don’t specify index=False, the column before the one named will be read.

Answered By: Chris
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.