Quando lavoriamo con dati reali, i valori mancanti sono quasi inevitabili. In precedenza avevamo visto come gestirli con fillna().

Spesso però non vogliamo semplicemente eliminarli o sostituirli con zero: vogliamo stimarli in modo intelligente, basandoci sui valori vicini. È qui che entra in gioco interpolate().

Cos'è l'interpolazione?

L'interpolazione è una tecnica per stimare i valori mancanti partendo dai dati che li circondano. Per esempio, se una serie di temperature giornaliere ha un valore mancante tra 20° e 24°, l'interpolazione lineare stimerebbe quel valore intorno a 22°.

È particolarmente utile con serie temporali, dati di sensori e qualsiasi sequenza in cui i valori cambiano gradualmente nel tempo.

Le librerie e il dataframe di esempio

Iniziamo importando pandas e numpy:

import pandas as pd
import numpy as np

E costruiamo un semplice dataframe (puoi saltare questo passaggio se hai già i tuoi dati):


df = pd.DataFrame({
    'giorno': [1, 2, 3, 4, 5, 6, 7],
    'temperatura': [20.0, np.nan, np.nan, 23.0, np.nan, 25.0, 26.0]
})

Ed ecco il nostro dataframe che contiene dei valori mancanti nella colonna “temperatura”.

giorno

temperatura

1

20.0

2

NaN

3

NaN

4

23.0

5

NaN

6

25.0

7

26.0

Utilizzo base di interpolate()

Il metodo interpolate() si applica direttamente a una colonna o a un intero dataframe. Per default usa l'interpolazione lineare: stima i valori mancanti tracciando una retta tra il valore precedente e quello successivo.

df['temperatura'].interpolate(inplace=True)

Ecco il risultato sulla colonna “temperatura”:

giorno

temperatura

1

20.0

2

21.0

3

22.0

4

23.0

5

24.0

6

25.0

7

26.0

I tre valori mancanti sono stati stimati in modo uniforme.

Nota bene:

interpolate() non modifica il dataframe originale a meno che non si usi il parametro inplace=True, come nell’esempio, oppure si riassegni il risultato alla colonna.

Scegliere il metodo di interpolazione

interpolate() accetta il parametro method che permette di scegliere il tipo di interpolazione. I più utili nella pratica sono:

  • method='linear' (default): stima i valori con una progressione uniforme tra i punti noti

  • method='ffill': propaga il valore precedente in avanti (forward fill)

  • method='bfill': propaga il valore successivo all'indietro (backward fill)

  • method='polynomial': usa una curva polinomiale (richiede il parametro order)

Approfondiremo i metodi di interpolate() nella prossima micro-lezione.

Interpolazione su più colonne

Se vuoi applicare interpolate() a tutte le colonne numeriche del dataframe in un colpo solo, puoi farlo direttamente sul dataframe:

df.interpolate(inplace=True)

pandas applicherà l'interpolazione lineare a ogni colonna numerica che contiene valori mancanti, lasciando invariate le colonne non numeriche.

Conclusione

interpolate() è uno strumento potente per gestire i valori mancanti in modo più sofisticato rispetto a fillna(): invece di usare un valore fisso, stima i dati mancanti in base al contesto. È particolarmente efficace con serie temporali e dati che seguono un andamento graduale.

Alla prossima micro-lezione 👋

Se vuoi imparare la data analysis con micro-lezioni che vanno dritto al sodo, iscriviti alla newsletter: