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

Le librerie e il dataframe

Iniziamo importando pandas:

import pandas as pd

Adesso 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 prezzo

  • il 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 finali

  • str.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:

  • str.strip()link

  • astype()link

  • Usare il chaining → link

Alla prossima micro-lezione 👋