La pulizia dati pandas è uno dei passaggi più importanti quando si lavora con tabelle, file CSV o dataset raccolti da fonti diverse. Prima ancora di analizzare i numeri o creare grafici, è fondamentale assicurarsi che i dati siano ordinati, coerenti e pronti per essere utilizzati. Anche un file apparentemente semplice può contenere celle vuote, formati non uniformi, valori sbagliati o righe duplicate.
Con Pandas, una delle librerie Python più usate per la gestione dei dati, queste operazioni diventano molto più rapide. Il vantaggio principale è che permette di intervenire in modo chiaro anche se si è agli inizi. Basta conoscere alcuni metodi essenziali per migliorare sensibilmente la qualità di un dataset.
In questa guida vedremo come affrontare i problemi più comuni nella pulizia dei dati con Pandas, usando esempi concreti e facili da capire. L’obiettivo è costruire una base solida, utile sia per chi sta studiando Python sia per chi vuole iniziare a lavorare sui dati in modo più professionale.
Come gestire le celle vuote nella pulizia dati pandas
Le celle vuote sono tra i problemi più frequenti in qualsiasi dataset. Possono comparire perché un’informazione non è stata inserita, perché un file è stato esportato male oppure perché i dati provengono da sistemi differenti. In Pandas, questi valori mancanti vengono spesso rappresentati come NaN.
Il primo passo è identificare dove si trovano. Per farlo, si può caricare un file e controllare quali colonne contengono valori mancanti.
import pandas as pd
df = pd.read_csv("dati.csv")
print(df.isnull().sum())
Questo controllo è utile perché consente di capire subito se il problema riguarda poche righe o intere colonne. Una volta individuate le celle vuote, si può scegliere se eliminarle oppure sostituirle con un valore più adatto.
Se le righe incomplete sono poche, eliminarle può essere la scelta più semplice.
df = df.dropna()
Se invece si preferisce mantenere il dataset intatto, si possono riempire i vuoti con un valore fisso oppure con una misura statistica, come la media.
df["Età"] = df["Età"].fillna(df["Età"].mean())
df["Città"] = df["Città"].fillna("Non specificata")
Nella pratica, non esiste una soluzione valida in assoluto. Dipende dal contesto. In un dataset anagrafico, ad esempio, sostituire un’età mancante con la media può avere senso. In altri casi, invece, è preferibile lasciare il dato mancante o scartare la riga. Una buona pulizia dati pandas non consiste solo nell’usare i metodi giusti, ma anche nel fare scelte coerenti con il significato dei dati.
Correggere i dati con formato sbagliato in Pandas
Un altro problema molto comune riguarda i dati nel formato sbagliato. Può capitare, per esempio, che una colonna di date venga letta come testo, oppure che un prezzo venga interpretato come stringa a causa della presenza di simboli o separatori non standard. Quando il formato non è corretto, l’analisi successiva diventa meno affidabile e spesso genera errori.
Per controllare il tipo di dato di ogni colonna, Pandas mette a disposizione un comando molto utile.
print(df.dtypes)
Se una colonna dovrebbe contenere date, è buona norma convertirla esplicitamente.
df["Data"] = pd.to_datetime(df["Data"])
Lo stesso vale per i numeri. Se una colonna è stata caricata come testo, si può trasformare in formato numerico.
df["Prezzo"] = pd.to_numeric(df["Prezzo"], errors="coerce")
L’opzione errors=”coerce” è particolarmente utile perché trasforma in valori mancanti le celle che non possono essere convertite. In questo modo, eventuali errori nascosti emergono subito e possono essere gestiti successivamente.
In molti casi, prima della conversione conviene ripulire il contenuto della colonna. Ad esempio, se i prezzi includono il simbolo dell’euro o virgole usate come separatori decimali, può essere utile fare una sostituzione preliminare.
df["Prezzo"] = df["Prezzo"].str.replace("€", "", regex=False)
df["Prezzo"] = df["Prezzo"].str.replace(",", ".", regex=False)
df["Prezzo"] = pd.to_numeric(df["Prezzo"], errors="coerce")
Questa fase è spesso sottovalutata, ma è centrale nella pulizia dati pandas. Un dataset può sembrare corretto a colpo d’occhio, ma se i formati non sono omogenei, i risultati finali rischiano di essere fuorvianti.
Individuare e sistemare i dati errati con Pandas
I dati errati non sono necessariamente vuoti e non sempre hanno un formato sbagliato. A volte il problema è più sottile: un’età pari a 250 anni, un voto superiore al massimo previsto, una città scritta in modo incoerente oppure una categoria inserita con un refuso. Sono valori formalmente presenti, ma poco credibili o chiaramente sbagliati.
Per intercettare questi casi, è utile iniziare con un’esplorazione delle colonne numeriche.
print(df.describe())
Per le colonne testuali, invece, si può controllare l’elenco dei valori distinti.
print(df["Categoria"].unique())
Se si scopre che una colonna contiene valori fuori scala, si può intervenire filtrando o correggendo i record. Per esempio, se l’età deve essere compresa tra 0 e 100:
df = df[(df["Età"] >= 0) & (df["Età"] <= 100)]
Per i testi scritti in modi diversi ma riferiti allo stesso concetto, è utile standardizzare i valori.
df["Categoria"] = df["Categoria"].replace({"info tech": "IT", "Informatica": "IT", "It": "IT"})
In un lavoro reale, questa fase richiede attenzione e una certa familiarità con il contenuto del dataset. Non basta applicare regole automatiche: bisogna capire quali valori sono davvero errati e quali, invece, rappresentano eccezioni legittime. È qui che la pulizia dei dati con Pandas diventa un’attività concreta, ragionata e molto vicina ai problemi reali.
Rimuovere i duplicati nei dataset con Pandas
I duplicati sono righe ripetute che possono alterare conteggi, medie e statistiche. In alcuni casi sono facili da individuare, in altri sono meno evidenti perché riguardano solo alcune colonne. Eliminare i duplicati è una fase essenziale, soprattutto quando i dati derivano da importazioni multiple o da unioni tra file differenti.
Per verificare quante righe duplicate sono presenti, si può usare questo comando:
print(df.duplicated().sum())
Se si decide di rimuoverle, Pandas offre un metodo immediato.
df = df.drop_duplicates()
Non sempre, però, il duplicato riguarda l’intera riga. A volte interessa solo una colonna chiave, come un indirizzo email, un codice cliente o un ID prodotto. In questi casi si può specificare il campo su cui controllare.
df = df.drop_duplicates(subset=["Email"])
Si può anche decidere quale occorrenza mantenere, ad esempio la prima o l’ultima.
df = df.drop_duplicates(subset=["Email"], keep="last")
Questo tipo di intervento è molto utile quando si vogliono conservare i dati più aggiornati. Anche qui, la scelta dipende dall’obiettivo dell’analisi. Una buona pulizia dati pandas non significa cancellare tutto ciò che si ripete, ma distinguere tra ridondanza inutile e informazione realmente significativa.