• analiticas
  • Posts
  • Trasforma i tipi di dati con astype() in pandas

Trasforma i tipi di dati con astype() in pandas

Come cambiare facilmente i tipi di dati delle tue colonne

Una delle primissime tappe dell’analisi dei dati consiste nel controllarne la qualità ed eventualmente sistemarli.

In questa micro-lezione esploreremo l'uso del metodo astype() in pandas, uno strumento fondamentale per la gestione dei tipi di dati nei nostri dataframe.

Infatti, a volte capita di dover cambiare il tipo di dati di una colonna. Ad esempio, potremmo dover convertire una colonna con dei numeri decimali in numeri interi, o viceversa.

Il metodo astype() di pandas è la soluzione a molte di queste situazioni.

La libreria e il dataframe

Iniziamo importando la libreria pandas:

import pandas as pd

Creiamo un dataframe con tre colonne (se hai già dei dati su un foglio Excel e vuoi importarli con pandas, dai un’occhiata a questa micro-lezione):

df = pd.DataFrame({
    'Nome': ['Sara', 'Luigi', 'Mario'],
    'Eventi': ['7', '3', '9'],
    'Spese': [87.0, 22.0, 91.0]
})

Il nostro dataframe avrà questo aspetto:

Nome

Eventi

Spese

Sara

7

87.0

Luigi

3

22.0

Mario

9

91.0

Come visto nella micro-lezione sui 5 comandi per esplorare i dati con pandas, possiamo scoprire il tipo di dati di ogni colonna eseguendo il comando dtypes:

df.dtypes

Ed ecco qui il risultato:

Nome       object
Eventi     object
Spese     float64
dtype: object

Ma cosa significa?

  • object indica un tipo di dati generico, dalle molteplici applicazioni. Ad esempio pandas interpreta come object le colonne contenenti stringhe di testo o dati misti (lettere e numeri).

  • float64 è il tipo di dati dei numeri decimali, siano essi positivi o negativi. Il numero 64 indica che i numeri decimali sono salvati usando 64 bit di memoria.

Usiamo astype() per convertire tipi di dati

La colonna “Eventi” del nostro dataframe contiene dei numeri che però non sono letti come tali da pandas.

Andiamo dunque a trasformare i dati della colonna “Eventi” in numeri interi:

df['Eventi'] = df['Eventi'].astype(int)

Eseguendo il comando df.dtypes possiamo osservare il cambiamento:

Nome       object
Eventi      int64
Spese     float64
dtype: object

La colonna “Eventi” è adesso di tipo int64 che indica i numeri interi.

Convertiamo più colonne contemporaneamente

Possiamo anche cambiare i valori di più colonne in una sola operazione. Immaginiamo di voler convertire i valori delle colonne “Eventi” e “Spese” in numeri interi.

Per farlo, dobbiamo usare un dizionario all’interno del metodo astype(). Ecco come fare:

df = df.astype({'Eventi': int, 'Spese': int})

Ed ecco i tipi di dati delle colonne del nostro dataframe:

Nome      object
Eventi     int64
Spese      int64
dtype: object

Attenzione agli imprevisti

In alcuni casi la conversione potrebbe non essere possibile.

Ad esempio, non possiamo convertire i valori di una di colonna che contiene una stringa di testo (ad esempio “abc”) in numeri. Inoltre, in alcune situazioni, la conversione di colonne contenenti valori nulli in numeri interi potrebbe essere limitata.

In questi casi, astype() solleverà un errore.

Per situazioni come queste, sarebbe opportuno utilizzare try e except quando convertiamo tipi di dati, soprattutto se abbiamo intenzione di riutilizzare il codice per analisi future.

A tal proposito, ti consiglio di leggere questa micro-lezione.

Conclusione

astype() ci permette di gestire i tipi di dati nei dataframe pandas con facilità.

Questo è molto spesso necessario se stiamo preparando dati per analisi più avanzate

Alla prossima micro-lezione 👋