Giới thiệu lặp qua DataFrame của pandas

Viết mã Python hiệu quả

Logan Thomas

Scientific Software Technical Trainer, Enthought

Ôn tập pandas

  • Xem tổng quan pandas trong Intermediate Python
  • Thư viện dùng cho phân tích dữ liệu
  • Cấu trúc dữ liệu chính: DataFrame
    • Dữ liệu dạng bảng với hàng và cột có nhãn
    • Xây dựng trên mảng NumPy
  • Mục tiêu chương:
    • Thực hành tốt khi lặp qua DataFrame của pandas
Viết mã Python hiệu quả

Thống kê bóng chày

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
Viết mã Python hiệu quả

Thống kê bóng chày

  Team
0  ARI     
1  ATL     
2  BAL     
3  BOS     
4  CHC

alt=”Logo Arizona Diamondbacks với chữ ARI bên dưới, logo Atlanta Braves với chữ ATL bên dưới, logo Baltimore Orioles với chữ BAL bên dưới, logo Boston Red Sox với chữ BOS bên dưới, và logo Chicago Cubs với chữ CHC bên dưới”

Viết mã Python hiệu quả

Thống kê bóng chày

  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
Viết mã Python hiệu quả

Tính tỷ lệ thắng

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
Viết mã Python hiệu quả

Thêm tỷ lệ thắng vào 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
Viết mã Python hiệu quả

Thêm tỷ lệ thắng vào 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
Viết mã Python hiệu quả

Lặp với .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 mỗi vòng (trung bình ± độ lệch chuẩn của 7 lần chạy, 10 vòng mỗi lần)
Viết mã Python hiệu quả

Lặp với .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
Viết mã Python hiệu quả

Lặp với .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 mỗi vòng (trung bình ± độ lệch chuẩn của 7 lần chạy, 10 vòng mỗi lần)
Viết mã Python hiệu quả

Luyện lặp DataFrame với .iterrows()

Viết mã Python hiệu quả

Preparing Video For Download...