Introduktion till iteration i pandas DataFrame

Att skriva effektiv Python-kod

Logan Thomas

Scientific Software Technical Trainer, Enthought

pandas – en repetition

  • Se pandas-översikt i Intermediate Python
  • Bibliotek för dataanalys
  • Huvuddatastrukturen är DataFrame
    • Tabelldata med namngivna rader och kolumner
    • Bygger på NumPy:s arraystruktur
  • Kapitelmål:
    • Bästa praxis för att iterera över en pandas DataFrame
Att skriva effektiv Python-kod

Basebollstatistik

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
Att skriva effektiv Python-kod

Basebollstatistik

  Team
0  ARI     
1  ATL     
2  BAL     
3  BOS     
4  CHC

alt="Arizona Diamondbacks logotyp med texten ARI nedanför, Atlanta Braves logotyp med texten ATL nedanför, Baltimore Orioles logotyp med texten BAL nedanför, Boston Red Sox logotyp med BOS nedanför och Chicago Cubs logotyp med CHC nedanför"

Att skriva effektiv Python-kod

Basebollstatistik

  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
Att skriva effektiv Python-kod

Beräkna vinstprocent

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
Att skriva effektiv Python-kod

Lägga till vinstprocent i 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
Att skriva effektiv Python-kod

Lägga till vinstprocent i 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
Att skriva effektiv Python-kod

Iterera med .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 per loop (mean ± std. dev. of 7 runs, 10 loops each)
Att skriva effektiv Python-kod

Iterera med .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
Att skriva effektiv Python-kod

Iterera med .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 per loop (mean ± std. dev. of 7 runs, 10 loops each)
Att skriva effektiv Python-kod

Öva på DataFrame-iteration med .iterrows()

Att skriva effektiv Python-kod

Preparing Video For Download...