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().
Il programma della micro-lezione
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 npE 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 notimethod='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 parametroorder)
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:
