Ottimizzazione del codice Panda: l'impatto della sequenza operativa |  di Marcin Kozak |  Marzo 2024

 | Intelligenza-Artificiale

PROGRAMMAZIONE PYTHON

Scopri come riorganizzare il codice per ottenere miglioramenti significativi della velocità.

fotografato da Nick Fewings SU Unsplash

I panda offrono un framework fantastico per operare su dataframe. Nella scienza dei dati, lavoriamo con dataframe piccoli, grandi e talvolta molto grandi. Anche se analizzare quelli di piccole dimensioni può essere incredibilmente veloce, anche una singola operazione su un big dataframe può richiedere molto tempo.

In questo articolo mostrerò che spesso è possibile abbreviare questo tempo con qualcosa che non costa praticamente nulla: l'ordine delle operazioni su un dataframe.

Immagina il seguente dataframe:

import pandas as pd

n = 1_000_000
df = pd.DataFrame({
letter: list(range(n))
for letter in "abcdefghijklmnopqrstuwxyz"
})

Con un milione di righe e 25 colonne, è grande. Molte operazioni su tale frame di dati saranno evidenti sugli attuali personal computer.

Immaginiamo di voler filtrare le righe, in modo da prendere quelle che rispettano la seguente condizione: a < 50_000 and b > 3000 e seleziona cinque colonne: take_cols=('a', 'b', 'g', 'n', 'x'). Possiamo farlo nel modo seguente:

subdf = df(take_cols)
subdf = subdf(subdf('a') < 50_000)
subdf = subdf(subdf('b') > 3000)

In questo codice prendiamo prima le colonne richieste e poi eseguiamo il filtraggio delle righe. Possiamo ottenere lo stesso risultato in un ordine diverso delle operazioni, eseguendo prima il filtraggio e poi selezionando le colonne:

subdf = df(df('a') < 50_000)
subdf = subdf(subdf('b') > 3000)
subdf = subdf(take_cols)

Possiamo ottenere lo stesso risultato concatenando le operazioni di Panda. Le pipe dei comandi corrispondenti sono le seguenti:

# first take columns then filter rows
df.filter(take_cols).query(query)

# first filter rows then take columns
df.query(query).filter(take_cols)

Da df è grande, le quattro versioni probabilmente differiranno in termini di prestazioni. Quale sarà il più veloce e quale sarà il più lento?

Analizziamo queste operazioni. Utilizzeremo il timeit modulo:

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *