# La funzione fillna() di Pandas per la sostituzione dei valori NaN

La funzione `DataFrame.fillna()` di [Pandas per Python](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/pandas-di-python/) è utilizzata per **sostituire i valori mancanti in un DataFrame**. In molti casi questa operazione è utile per facilitare i processi di pulizia dei dati o per l’esecuzione di analisi.

## La sintassi di `fillna()` in Pandas

La funzione `fillna()` accetta **fino a cinque parametri** e la struttura della sua sintassi è la seguente:

```python
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)
```

### Parametri applicabili

È possibile personalizzare il comportamento di `DataFrame.fillna()` in Pandas grazie a diversi parametri:

<table>
  <thead>
    <tr>
      <th><strong>Parametro</strong></th>
      <th><strong>Descrizione</strong></th>
      <th><strong>Valore predefinito</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`value`</td>
      <td>Un valore scalato o un [dizionario](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dizionari-in-python/) oppure una serie per la sostituzione dei NaN</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`method`</td>
      <td>Indica il metodo per il riempimento; riempimento in avanti (`ffill`) o riempimento all’indietro (`bfill`)</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`axis`</td>
      <td>Determina l’asse lungo il quale eseguire l’operazione (0 oppure `index` per le righe, 1 oppure `columns` per le colonne)</td>
      <td>0</td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Se `True`, le modifiche vengono apportate direttamente nel DataFrame originale</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`limit`</td>
      <td>Intero che limita il numero di valori NaN da sostituire</td>
      <td>`None`</td>
    </tr>
  </tbody>
</table>

N.B. Nelle versioni future, il parametro `method` **probabilmente non sarà più supportato**. I programmatori e le programmatrici possono quindi ricorrere a `obj.ffill()` o `obj.bfill()`. Le due funzioni hanno lo stesso effetto del corrispondente parametro `method`.

## Applicazione di `DataFrame.fillna()` in Pandas

È possibile utilizzare la funzione `fillna()` di Pandas in diversi modi:

### Sostituzione di valori NaN con un valore fisso

Per iniziare, definiamo un DataFrame:

```python
import pandas as pd
# Esempio di DataFrame con diversi valori
data = {
    'A': [1, 2, None, 4],
    'B': [None, 2, 3, 4],
    'C': [1, None, 3, 4]
}
df = pd.DataFrame(data)
print(df)
```

Il DataFrame appena definito si presenta così:

```none
A    B    C
0  1.0  NaN  1.0
1  2.0  2.0  NaN
2  NaN  3.0  3.0
3  4.0  4.0  4.0
```

N.B. Ricorda che in Pandas per Python il valore `None` nei DataFrame e nelle serie viene interpretato come `NaN`.

Ora, per sostituire i valori mancanti con il valore 0 puoi utilizzare la funzione `fillna()` di Pandas:

```python
# Sostituzione dei valori mancanti con il valore 0
df_filled = df.fillna(0)
print(df_filled)
```

Nel risultato, ciascun NaN è stato sostituito con il valore 0 assegnato alla funzione:

```none
A    B    C
0  1.0  0.0  1.0
1  2.0  2.0  0.0
2  0.0  3.0  3.0
3  4.0  4.0  4.0
```

### Utilizzo del metodo di riempimento in avanti `ffill`

Se i valori NaN devono essere riempiti con i valori precedenti della rispettiva colonna, è possibile utilizzare il metodo `ffill`, che viene assegnato come parametro alla funzione:

```python
# Sostituzione di tutti i valori NaN con il valore precedente
df_ffill = df.fillna(method='ffill')
print(df_ffill)
```

In questo esempio, i valori NaN nelle colonne “A” e “C” sono stati sostituiti con i valori precedenti nella stessa colonna. Poiché nella colonna “B” non era presente alcun valore precedente, il valore NaN viene mantenuto:

```none
A    B    C
0  1.0  NaN  1.0
1  2.0  2.0  1.0
2  2.0  3.0  3.0
3  4.0  4.0  4.0
```

### Utilizzo riga per riga del metodo di riempimento all’indietro `bfill`

I valori NaN possono essere riempiti anche con i valori successivi della rispettiva riga. A tal fine occorre utilizzare non soltanto il metodo `bfill`, ma bisogna anche impostare il parametro `axis` su 1:

```python
df_bfill = df.fillna(method='bfill', axis=1)
print(df_bfill)
```

Nel risultato, i valori NaN della riga zero e della seconda riga sono stati sostituiti dai rispettivi valori successivi. Nella prima colonna rimane ancora un valore NaN, poiché in questa riga non è presente alcun valore successivo corrispondente:

```none
A    B    C
0  1.0  1.0  1.0
1  2.0  2.0  NaN
2  3.0  3.0  3.0
3  4.0  4.0  4.0
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-fillna-in-pandas-per-python/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-fillna-in-pandas-per-python/) for AI/LLM consumption.