← Torna al blog
·8 min di lettura·

Pandas vs Polars vs Dask, nei grafici live

Tre librerie di dataframe Python, tre grafici Chart.js dal vivo: un bubble chart per l’ecosistema, un bubble chart scriptable il cui colore viene dal valore e non dalla libreria, e un grafico a linee con animazione progressiva per l’adozione. Niente screenshot – il canvas qui sopra lo disegna il vostro browser.

PythonIngegneria dei datiChart.jsPandasPolarsDask

Grafici live – Chart.js, renderizzati nel vostro browser

Volevo una pagina che mostrasse davvero la differenza tra pandas, Polars e Dask, invece di limitarmi a dire che Polars è «veloce». I tre grafici qui sopra sono Chart.js, eseguito lato client, su un dataset fisso che ho scelto a mano – non un modello standard con numeri segnaposto. Le statistiche dell’ecosistema come bubble chart. Un benchmark come bubble chart scriptable, dove il colore viene calcolato dal valore invece di essere fissato per libreria. Una curva di adozione che si disegna progressivamente, da sinistra a destra, così come la crescita reale si è dispiegata anno dopo anno.

Tre librerie, un solo compito – dati tabellari in Python – e tre compromessi molto diversi tra throughput, memoria e quanto del vostro codice pandas esistente sopravvive al passaggio. I numeri qui sotto sono arrotondati, datati settembre 2026, e il benchmark è illustrativo, non un’esecuzione riprodotta esattamente su questa pagina. Preferisco ripeterlo una volta di troppo piuttosto che lasciare che un grafico suggerisca una precisione che non ha.

1. Perché solo tre librerie si dividono le bolle

I bubble chart e i grafici a dispersione sono l’unico tipo di grafico in cui ogni segno può finire proprio accanto a qualsiasi altro, quindi una palette categoriale deve reggere ogni coppia possibile, non solo i vicini in una legenda. Facendo passare quel controllo «tutte le coppie» sul mio solito set di otto tonalità, solo i primi tre colori lo superano, sia in modalità chiara sia scura, per una lettrice daltonica. Non è una questione di gusto: è il vero motivo per cui il grafico dell’ecosistema qui sopra confronta esattamente pandas, Polars e Dask invece di cinque librerie in cinque colori fangosi. PySpark e Modin si prendono un paragrafo più in basso invece di una bolla.

pandas continua a vincere sui download di un ordine di grandezza, esattamente quello che ci si aspetterebbe da uno standard di quindici anni con migliaia di integrazioni. Il dato più interessante è quanto Polars si sia avvicinato a Dask in stelle GitHub con circa un decimo dei contributori: un team piccolo e concentrato che riscrive il motore da zero invece di estendere un’API esistente può a quanto pare superare un team molto più grande.

2. Colore scriptable, non colore d’identità

Il grafico delle prestazioni esegue un groupby con aggregazione su un CSV a due dimensioni – 2 GB, che sta comodamente in memoria, e 20 GB, al limite di un laptop tipico. Chart.js permette di definire elements.point.radius e backgroundColor come funzioni invece che valori fissi, esattamente ciò che mostra l’esempio ufficiale delle scriptable options di Chart.js. Qui l’ho usato per qualcosa con un significato reale: il colore viene calcolato direttamente dal tempo di esecuzione in secondi – veloce, moderato, lento – senza essere fissato per libreria, così lo stesso verde può appartenere a Polars a 2 GB o a Dask a 20 GB. Il raggio della bolla viene dal picco di RAM, su scala a radice quadrata, in modo che sia l’area, non il raggio grezzo, a seguire la memoria in modo circa lineare.

A 2 GB, Dask perde persino contro pandas normale – costruire un grafo di task ha un costo che si ripaga solo quando c’è abbastanza lavoro da distribuire. A 20 GB il quadro si ribalta: pandas single-thread, che copia i dati in memoria, degrada di più; Polars, su Rust con SIMD ed esecuzione in streaming, resta nella fascia «moderata»; Dask, dividendo il file in blocchi, tiene sotto controllo la memoria e chiude gran parte del divario di tempo con Polars.

3. Linee progressive, e cosa sceglierei davvero

Il grafico di crescita segue i download settimanali stimati da PyPI dal 2019 al 2026 per le stesse tre librerie e si anima come l’esempio progressive-line dello stesso Chart.js: ogni punto riceve un proprio ritardo in base al suo indice, così la linea si disegna da sola da sinistra a destra invece di limitarsi a comparire in dissolvenza. È un’eco deliberata del tema, non una decorazione – anche l’adozione reale si è dispiegata anno dopo anno. pandas si sta stabilizzando, che è l’aspetto di uno standard maturo di quindici anni, non di una libreria che perde terreno. Polars, uscito nel 2020, mostra la classica curva da avvio tardivo: appena visibile all’inizio, poi una svolta netta quando persone al di fuori della bolla degli entusiasti di Rust hanno iniziato a scrivere della sua velocità.

Allora, cosa sceglierei davvero? pandas quando l’ecosistema e la memoria muscolare del team contano più dei secondi grezzi. Polars per una nuova pipeline su una sola macchina potente, dove memoria e CPU costano soldi veri. Dask quando i dati smettono proprio di stare su una sola macchina e si preferisce mantenere codice a forma di pandas invece di riscriverlo in PySpark. PySpark e Modin stanno un passo più in là – PySpark quando si è ormai saldamente in territorio cluster o Spark gestisce già l’infrastruttura, Modin quando l’obiettivo onesto è un’accelerazione parallela con una modifica di import di una riga e nessuna voglia di riscrivere.

  • pandas – dati fino a qualche GB, ecosistema massimo, un team che conosce già l’API a memoria.
  • Polars – una sola macchina potente, una pipeline nuova senza codice legacy da trascinarsi dietro, memoria e CPU che costano davvero.
  • Dask – dati che non stanno più su una sola macchina, un’API a forma di pandas a cui non si vuole rinunciare, un cluster che esiste o sta arrivando.
  • PySpark o Modin – un passo oltre: PySpark quando si è saldamente in territorio cluster, Modin per uno scambio di import di una riga quando riscrivere non è un’opzione.

Sulle cifre

Le stelle GitHub e i download settimanali da PyPI sono stime arrotondate a settembre 2026, prese da tracker pubblici come pepy.tech e dai repository dei singoli progetti. I numeri del benchmark riproducono la forma tipica dei confronti groupby pubblici, non un’esecuzione fatta apposta per questa pagina – i secondi reali dipendono da hardware, versioni e forma dei vostri dati. Tutti e tre i grafici sono costruiti su Chart.js: un bubble chart, un bubble chart scriptable e un’animazione progressive-line, gli stessi tre pattern di esempio che Chart.js fornisce nella propria documentazione.

Parliamo del tuo progetto?

Sono un’ingegnera web senior, specializzata in React e Next.js - disponibile per progetti freelance in tutto il mondo.

Dove sono

Kyiv, Ucraina

Telegram

Contattami

WhatsApp

Contattami