Introduction à l'itération sur un DataFrame pandas

Rédiger du code Python efficace

Logan Thomas

Scientific Software Technical Trainer, Enthought

Rappel sur pandas

  • Aperçu de pandas dans Intermediate Python
  • Bibliothèque pour l'analyse de données
  • Structure principale : le DataFrame
    • Données tabulaires avec étiquettes de lignes et de colonnes
    • Basé sur les tableaux NumPy
  • Objectif du chapitre :
    • Bonnes pratiques pour itérer sur un DataFrame pandas
Rédiger du code Python efficace

Statistiques de baseball

import pandas as pd

baseball_df = pd.read_csv('baseball_stats.csv')
print(baseball_df.head())
  Team League  Year   RS   RA   W    G  Playoffs
0  ARI     NL  2012  734  688  81  162         0
1  ATL     NL  2012  700  600  94  162         1
2  BAL     AL  2012  712  705  93  162         1
3  BOS     AL  2012  734  806  69  162         0
4  CHC     NL  2012  613  759  61  162         0
Rédiger du code Python efficace

Statistiques de baseball

  Team
0  ARI     
1  ATL     
2  BAL     
3  BOS     
4  CHC

alt="Logo des Arizona Diamondbacks avec le texte ARI dessous, logo des Atlanta Braves avec ATL dessous, logo des Baltimore Orioles avec BAL dessous, logo des Boston Red Sox avec BOS dessous, et logo des Chicago Cubs avec CHC dessous"

Rédiger du code Python efficace

Statistiques de baseball

  Team League  Year   RS   RA   W    G  Playoffs
0  ARI     NL  2012  734  688  81  162         0
1  ATL     NL  2012  700  600  94  162         1
2  BAL     AL  2012  712  705  93  162         1
3  BOS     AL  2012  734  806  69  162         0
4  CHC     NL  2012  613  759  61  162         0
Rédiger du code Python efficace

Calcul du pourcentage de victoires

import numpy as np

def calc_win_perc(wins, games_played):

    win_perc = wins / games_played

    return np.round(win_perc,2)
win_perc = calc_win_perc(50, 100)
print(win_perc)
0.5
Rédiger du code Python efficace

Ajouter le pourcentage de victoires au DataFrame

win_perc_list = []

for i in range(len(baseball_df)): row = baseball_df.iloc[i]
wins = row['W'] games_played = row['G']
win_perc = calc_win_perc(wins, games_played)
win_perc_list.append(win_perc)
baseball_df['WP'] = win_perc_list
Rédiger du code Python efficace

Ajouter le pourcentage de victoires au DataFrame

print(baseball_df.head())
  Team League  Year   RS   RA   W    G  Playoffs    WP
0  ARI     NL  2012  734  688  81  162         0  0.50
1  ATL     NL  2012  700  600  94  162         1  0.58
2  BAL     AL  2012  712  705  93  162         1  0.57
3  BOS     AL  2012  734  806  69  162         0  0.43
4  CHC     NL  2012  613  759  61  162         0  0.38
Rédiger du code Python efficace

Itérer avec .iloc

%%timeit
win_perc_list = []

for i in range(len(baseball_df)):
    row = baseball_df.iloc[i]

    wins = row['W']
    games_played = row['G']

    win_perc = calc_win_perc(wins, games_played)
    win_perc_list.append(win_perc)

baseball_df['WP'] = win_perc_list
183 ms ± 1.73 ms par boucle (moyenne ± éc.-type de 7 exécutions, 10 boucles chacune)
Rédiger du code Python efficace

Itérer avec .iterrows()

win_perc_list = []

for i,row in baseball_df.iterrows():

wins = row['W'] games_played = row['G'] win_perc = calc_win_perc(wins, games_played) win_perc_list.append(win_perc) baseball_df['WP'] = win_perc_list
Rédiger du code Python efficace

Itérer avec .iterrows()

%%timeit
win_perc_list = []

for i,row in baseball_df.iterrows():

    wins = row['W']
    games_played = row['G']

    win_perc = calc_win_perc(wins, games_played)
    win_perc_list.append(win_perc)

baseball_df['WP'] = win_perc_list
95,3 ms ± 3,57 ms par boucle (moyenne ± éc.-type de 7 exécutions, 10 boucles chacune)
Rédiger du code Python efficace

Pratique : itérer un DataFrame avec .iterrows()

Rédiger du code Python efficace

Preparing Video For Download...