Come aumentare la velocità di Pandas e processare dataset di 10 milioni di righe in millisecondi

Aumentare velocità di Pandas e processare dataset di 10M righe in millisecondi

Usa Pandas nel modo in cui è stato pensato

Immagine di me con Midjourney

Introduzione

“Fantastico… un altro articolo su come rendere Pandas n volte più veloce”.

Credo di averlo detto innumerevoli volte negli ultimi tre anni in cui ho usato Pandas. L’ultimo che ho visto diceva “rendi Pandas 71.803 volte più veloce”.

Ma non ti farò una promessa del genere. Ti mostrerò solo come utilizzare Pandas nel modo più veloce possibile. Perché non puoi velocizzare qualcosa che già è veloce.

Ha senso, no?

Ti faccio una domanda. Con quale mano tocchi l’orecchio destro quando dico “Tocca il tuo orecchio destro”. Ovviamente, con la mano destra. Non toccheresti l’orecchio destro mettendo la mano sinistra sopra la testa. Sarebbe strano.

Bene, utilizzare le funzioni che nella documentazione di Pandas sono esplicitamente indicate come lente invece dei metodi più veloci sarebbe altrettanto strano.

Ecco perché questo articolo ti mostrerà le migliori pratiche per alcune delle operazioni di manipolazione dei dati più comuni in Pandas. Puoi persino considerare queste migliori pratiche come “buon senso”, perché è così che gli sviluppatori di Pandas hanno pensato che la loro libreria dovesse essere utilizzata.

Indicizzazione efficiente

Iniziamo con le operazioni più basilari. In particolare, vedremo il modo più veloce per selezionare righe e colonne. Come sai, ci sono due operatori di indicizzazione – loc e iloc in Pandas. Anche se la loro differenza non conta molto per i dataset di piccole dimensioni, diventerà piuttosto evidente man mano che la dimensione dei dati aumenta.

Innanzitutto, per scegliere una riga o più righe, iloc è più veloce.

Al contrario, loc è migliore per scegliere colonne con le loro etichette:

>>> tps.loc[:, ["f1", "f2", "f3"]]

Per campionare colonne o righe, la funzione integrata sample è la più veloce. Potresti pensare di campionare utilizzando indici casuali con NumPy…