HOWTO · Pandas

Sostituisci tutti i valori NaN con zeri in una colonna di un DataFrame Pandas

sostituire i valori NaN con zeri in DataFrame utilizzando i metodi df.fillna(), df.replace() nella libreria pandas

In questa pagina

Per sostituire i valori mancanti in una colonna di un pandas DataFrame, seleziona la colonna, applica fillna(0) e assegna la Series restituita alla stessa colonna: df["A"] = df["A"].fillna(0). In questo modo cambia solo la colonna A; i valori delle altre colonne restano invariati. Il metodo df.fillna() può riempire i valori mancanti nell’intero DataFrame, quindi selezionare prima una Series è importante quando vuoi intervenire su una sola colonna. df.replace() è un’alternativa per sostituire un valore specifico nella Series selezionata.

Sostituire i valori NaN in una colonna con fillna()

fillna() sostituisce i valori che pandas riconosce come mancanti con il valore indicato. Nell’esempio, quando pandas crea il DataFrame, None in una colonna numerica viene rappresentato come valore mancante. Assegnando il risultato di fillna(0) a df["A"], la sostituzione viene applicata a df; senza assegnazione, la variabile DataFrame rimarrebbe invariata. La seconda colonna serve da confronto e conserva il proprio valore mancante.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import pandas as pd

df = pd.DataFrame({
    "A": [1, 2, None, 4],
    "B": [None, 2, 3, 4],
})

df["A"] = df["A"].fillna(0)
print(df.to_string())
     A    B
0  1.0  NaN
1  2.0  2.0
2  0.0  3.0
3  4.0  4.0

L’output mostra che il valore mancante nella colonna A è diventato 0.0, mentre quello nella colonna B resta NaN. Le etichette visibili dell’esempio restano in inglese perché i blocchi di codice e output sono mantenuti invariati. Puoi usare lo stesso schema di assegnazione con il tuo DataFrame e la colonna desiderata. fillna() accetta anche altri valori sostitutivi e strategie di riempimento, come il riempimento in avanti o all’indietro: scegli queste opzioni solo se sono coerenti con il significato e l’ordine dei dati. Applicando df.fillna(0) al DataFrame, invece, i valori mancanti vengono riempiti in tutte le colonne.

Sostituire i valori NaN in una colonna con replace()

replace() è un’altra opzione quando vuoi sostituire un valore specifico o un insieme di valori. Per intervenire su un valore mancante in una Series, usa df["A"].replace(float("nan"), 0) e assegna la Series restituita a df["A"]. In questo modo specifichi esplicitamente un valore NaN; non dare per scontato che replace() interpreti sempre None come NaN. Come con fillna(), applicare il metodo alla Series selezionata limita l’operazione a quella colonna. Chiamando df.replace(...) sull’intero DataFrame, invece, possono essere modificati i valori corrispondenti in più colonne.

Per questo caso, fillna() esprime direttamente l’intento. Usa replace() quando è utile il suo comportamento basato sulla corrispondenza dei valori, per esempio se devi uniformare anche un segnaposto noto nella colonna selezionata. In entrambi gli esempi, assegna il risultato restituito se il codice successivo deve usare i dati modificati; per questo schema non è necessario inplace=True.

Scegliere un valore sostitutivo adatto ai dati

Lo zero è appropriato solo se rappresenta il significato di un’osservazione mancante nella tua analisi. Per esempio, può essere adatto quando un conteggio assente significa che non si è verificato alcun evento, ma può distorcere le misurazioni quando l’assenza significa «sconosciuto». A seconda della colonna e dell’analisi, potrebbe essere più adatta un’altra costante, un valore specifico del dominio o una statistica come la media o la mediana. Prima di riempire i valori mancanti, stabilisci come interpretarli: la sostituzione elimina la distinzione tra un’osservazione assente e uno zero effettivo.

Anche il valore sostitutivo deve essere compatibile con i dati della colonna. Uno zero numerico è adatto a una colonna numerica, mentre riempire una colonna di testo con zero può cambiare il modo in cui pandas rappresenta o elabora quei dati. Se i calcoli successivi dipendono dal tipo numerico, controlla il dtype risultante. Negli esempi viene riempita solo la colonna selezionata, così puoi evitare di modificare dati non correlati mentre fai questa scelta.

Controllare il risultato

Esamina la colonna interessata con df["A"] oppure visualizza il DataFrame per verificare che siano cambiati i valori previsti. Per contare gli eventuali valori mancanti rimasti nella colonna, usa df["A"].isna().sum(); un conteggio pari a zero indica che in quella Series non restano valori mancanti riconosciuti da pandas. Questo controllo non stabilisce se lo zero fosse la scelta analitica corretta: verifica anche che il valore sostitutivo sia coerente con il significato dei tuoi dati. Se il conteggio non è zero, controlla di aver selezionato la colonna prevista e di averle assegnato la Series restituita dal metodo.