Comment itérer sur les lignes d'un tableau de données (ou data frame) avec pandas ?

Pour itérer sur l'ensemble des lignes d'une data frame avec pandas on peut utiliser iterrows(), items() ou encore itertuples():

Prenons par exemple la data frame suivante:

>>> import pandas as pd
>>> data = {'Country':['USA', 'Spain', 'France', 'Canada'], 'Age':[10, 39, 21, 70]} 
>>> df = pd.DataFrame(data, index =['Bob', 'Jack', 'Ben', 'Paul'])
>>> df
      Age Country
Bob    10     USA
Jack   39   Spain
Ben    21  France
Paul   70  Canada

Itérer sur l'ensemble des lignes d'une data frame avec iterrows()

Pour parcourir l'ensemble des lignes de la data frame et afficher toutes les colonnes en même temps, on peut utiliser iterrows():

>>> for index, row in df.iterrows():
...     print(index)
...     print(row)
... 
Bob
Age         10
Country    USA
Name: Bob, dtype: object
Jack
Age           39
Country    Spain
Name: Jack, dtype: object
Ben
Age            21
Country    France
Name: Ben, dtype: object
Paul
Age            70
Country    Canada
Name: Paul, dtype: object

Itérer sur l'ensemble des lignes d'une data frame avec items()

Si on s'intéresse à la variation des colonnes en fonction des indices il est preferable d'utiliser items():

>>> for label, content in df.items():
...     print(label)
...     print(content)
... 
Age
Bob     10
Jack    39
Ben     21
Paul    70
Name: Age, dtype: int64
Country
Bob        USA
Jack     Spain
Ben     France
Paul    Canada
Name: Country, dtype: object

Si on veut se focaliser sur une colonne donnée on peut alors faire comme dans cet exemple:

>>> for label, content in df['Age'].items():
...     print(label,content)
... 
Bob 10
Jack 39
Ben 21
Paul 70

Itérer sur l'ensemble des lignes d'une data frame avec itertuples()

Une autre possibilité est d'utiliser itertuples():

>>> for row in df.itertuples():
...     print(row)
... 
Pandas(Index='Bob', Age=10, Country='USA')
Pandas(Index='Jack', Age=39, Country='Spain')
Pandas(Index='Ben', Age=21, Country='France')
Pandas(Index='Paul', Age=70, Country='Canada')

et afficher par exemple une colonne en particulier:

>>> for row in df.itertuples():
...     print(row[0],row[2])
... 
Bob USA
Jack Spain
Ben France
Paul Canada

ou

>>> for row in df.itertuples():
...     print(row.Age)
... 
10
39
21
70

Références