Quando lavoriamo con dati reali, è quasi inevitabile incontrare stringhe "sporche": spazi di troppo, caratteri indesiderati, simboli come "€" o "%", o formati inconsistenti.
In questa micro-lezione vediamo come usare str.replace() per gestire queste situazioni in modo semplice ed efficace.
Lo sponsor di questa micro-lezione
Table of Contents
Le librerie e il dataframe
Iniziamo importando pandas:
import pandas as pdAdesso creiamo un dataframe di esempio con alcuni dati da pulire (puoi saltare questo passaggio se hai già un tuo dataset):
df = pd.DataFrame({
'città': ['Roma ', 'milano', 'NAPOLI', 'Torino '],
'prezzo': ['€ 120', '€ 85', '€ 200', '€ 55'],
'variazione': ['+3,5%', '-1,2%', '+0,8%', '-4,1%']
})Il nostro dataframe ha tre problemi tipici:
spazi in eccesso nella colonna
cittàil simbolo "€" nella colonna
prezzoil simbolo "%" nella colonna
variazione
Utilizzo base di str.replace()
Il metodo str.replace() si applica su una colonna di tipo string e sostituisce un valore con un altro.
Per esempio, per rimuovere il simbolo "€" dalla colonna prezzo possiamo fare così:
df['prezzo'] = df['prezzo'].str.replace('€ ', '')Attenzione!
str.replace() restituisce una nuova Series. Per modificare il dataframe originale, assegna il risultato alla colonna di partenza.
Se non sai cosa é una Series, dai uno sguardo a questa micro-lezione.
Rimuovere caratteri speciali
Possiamo usare str.replace() anche per rimuovere il simbolo "%" e la virgola dalla colonna variazione.
Poi potremo convertirla in una colonna numerica con astype(), il metodo che avevamo approfondito in questa micro-lezione.
# Rimuoviamo il simbolo percentuale
df['variazione'] = df['variazione'].str.replace('%', '')
# Sostituiamo la virgola con il punto (formato decimale standard)
df['variazione'] = df['variazione'].str.replace(',', '.')
# Convertiamo in float
df['variazione'] = df['variazione'].astype(float)Per ragioni sia stilistiche che pratiche, questi tre passaggi si possono concatenare con il chaining:
df['variazione'] = (
df['variazione']
.str.replace('%', '')
.str.replace(',', '.')
.astype(float)
)Se non conosci questa tecnica, dai un’occhiata alla micro-lezione sul chaining.
Standardizzare i valori di una colonna
Nel nostro dataframe, la colonna città ha valori scritti in modo inconsistente: c'è chi ha usato le maiuscole, chi le minuscole, e ci sono spazi finali.
str.replace() potrebbe aiutarci, ma in questo caso ci sono metodi più efficaci. Useremo:
str.strip(): per rimuovere gli spazi iniziali e finalistr.capitalize(): per avere la prima lettera maiuscola, e il resto minuscolo
df['città'] = (
df['città']
.str.strip()
.str.capitalize()
)Nota bene:
str.strip() è spesso il primo passo da fare su qualsiasi colonna di testo: gli spazi "invisibili" sono tra le cause più comuni di errori nelle analisi. Per un approfondimento di questo metodo, dai un’occhiata a questa micro-lezione.
Usare le espressioni regolari
str.replace() supporta le espressioni regolari (regex), il che lo rende molto potente. Per attivare questa modalità, basta usare il parametro regex=True.
Per esempio, immaginiamo di voler rimuovere tutti i caratteri non numerici da una colonna (come codici fiscali o numeri di telefono mal formattati):
df['colonna'] = df['colonna'].str.replace(r'[^0-9]', '', regex=True)In questo caso, l'espressione [^0-9] significa "qualsiasi carattere che non sia un numero". Il risultato è una string composta solo da cifre.
Nota bene:
Una volta che sai che le espressioni regex sono supportate da str.replace(), puoi usare l’AI per scrivere espressioni più complesse.
Conclusione
str.replace() è uno strumento essenziale per chi lavora con i dati. Permette di risolvere rapidamente i problemi più comuni nella pulizia delle stringhe: rimuovere simboli indesiderati, correggere formati inconsistenti e preparare le colonne per le analisi successive.
Ricorda che spesso la pulizia dei dati non si fa in un solo passaggio: combinare str.replace() con metodi come str.strip(), str.lower() e astype() ti permette di gestire anche le situazioni più caotiche.
A tal proposito, ecco un paio di link ad altre micro-lezioni che trattano questi argomenti:
Alla prossima micro-lezione 👋
