pandas è probabilmente il pacchetto Python più importante per l’analisi dei dati. Con oltre 100 milioni di download al mese, è lo standard de facto per la manipolazione dei dati e l’analisi esplorativa. La sua capacità di leggere e scrivere in un’ampia gamma di formati lo rende uno strumento versatile per chi lavora in data science. Le sue funzioni di manipolazione dei dati lo rendono uno strumento estremamente accessibile e pratico per aggregare, analizzare e pulire i dati.
Nel nostro post su come imparare pandas abbiamo discusso il percorso di apprendimento per padroneggiare questo pacchetto. Questo tutorial per principianti coprirà tutti i concetti di base e illustrerà le diverse funzioni di pandas. Puoi anche dare un’occhiata al nostro corso Fondamenti di pandas per ulteriori dettagli.
Questo articolo è pensato per chi ha conoscenze di base di Python e nessuna esperienza precedente con pandas, per aiutarti a iniziare.
Che cos’è pandas?
pandas è un pacchetto Python per la manipolazione di dati tabellari. Cioè, dati sotto forma di righe e colonne, noti anche come DataFrame. In modo intuitivo, puoi pensare a un DataFrame come a un foglio Excel.
Le funzionalità di pandas includono trasformazioni dei dati, come ordinare le righe e prendere sottoinsiemi, il calcolo di statistiche riassuntive come la media, il reshaping dei DataFrame e l’unione di più DataFrame. pandas si integra bene con altri popolari pacchetti Python per la data science, spesso chiamati ecosistema PyData, tra cui
- NumPy per il calcolo numerico
- Matplotlib, Seaborn, Plotly e altri pacchetti per la visualizzazione dei dati
- scikit-learn per il machine learning
A cosa serve pandas?
pandas viene usato lungo tutto il flusso di lavoro dell’analisi dei dati. Con pandas puoi:
- Importare dataset da database, fogli di calcolo, file CSV (comma-separated values) e altro.
- Pulire i dataset, ad esempio gestendo i valori mancanti.
- Ordinare i dataset ristrutturandone la forma in un formato adatto all’analisi.
- Aggregare i dati calcolando statistiche riassuntive come la media delle colonne, la correlazione tra di esse e altro.
- Visualizzare i dataset e far emergere insight.
pandas include anche funzionalità per l’analisi di serie temporali e l’analisi di dati testuali.
Vantaggi principali del pacchetto pandas
Senza dubbio, pandas è un potente strumento di manipolazione dati ricco di vantaggi, tra cui:
- Nato per Python: Python è il linguaggio più popolare al mondo per machine learning e data science.
- Meno verboso per operazione: Il codice scritto in pandas è meno verboso e richiede meno righe per ottenere il risultato desiderato.
- Vista intuitiva dei dati: pandas offre una rappresentazione dei dati estremamente intuitiva che facilita comprensione e analisi.
- Set di funzionalità ampio: Supporta un’ampia gamma di operazioni: dall’analisi esplorativa alla gestione dei valori mancanti, dal calcolo di statistiche alla visualizzazione di dati univariati e bivariati, e molto altro.
- Lavora con grandi moli di dati: pandas gestisce con facilità dataset di grandi dimensioni. Offre velocità ed efficienza con dataset dell’ordine di milioni di record e centinaia di colonne, a seconda della macchina.
Come installare pandas?
Prima di entrare nelle funzionalità, installiamo pandas. Puoi evitare questo passaggio registrandoti per un account DataCamp gratuito e usando DataLab, un IDE in cloud che include pandas (insieme ai principali pacchetti Python per la data science) preinstallato.
Esegui e modifica il codice da questo tutorial online
Esegui codiceInstalla pandas
Installare pandas è semplice: usa il comando pip install nel tuo terminale.
pip install pandas
In alternativa, puoi installarlo tramite conda:
conda install pandas
Dopo aver installato pandas, è buona pratica controllare la versione installata per assicurarti che tutto funzioni correttamente:
import pandas as pd
print(pd.__version__) # Prints the pandas version
Questo conferma che pandas è installato correttamente e ti permette di verificare la compatibilità con altri pacchetti.
Importare dati in pandas
Per iniziare a lavorare con pandas, importa il pacchetto Python come mostrato sotto. L’alias più comune per pandas è pd.
import pandas as pd
Importare file CSV
Usa read_csv() con il percorso del file CSV per leggere un file comma-separated values (consulta il nostro tutorial sull’importazione dei dati con read_csv() per maggiori dettagli).
df = pd.read_csv("diabetes.csv")
Questa operazione carica il file CSV diabetes.csv e genera un oggetto DataFrame di pandas df. Nel corso di questo tutorial vedrai come manipolare questi DataFrame.
Importare file di testo
La lettura di file di testo è simile ai CSV. L’unica differenza è che devi specificare un separatore con l’argomento sep, come mostrato sotto. Il separatore indica il simbolo usato per separare le righe in un DataFrame. Virgola (sep = ","), spazio bianco (sep = "\s"), tabulazione (sep = "\t") e due punti (sep = ":") sono i più comuni. Qui \s rappresenta un singolo carattere di spazio.
df = pd.read_csv("diabetes.txt", sep="\s")
Importare file Excel (singolo foglio)
Leggere file Excel (sia XLS che XLSX) è semplice con la funzione read_excel(), passando il percorso del file come input.
df = pd.read_excel('diabetes.xlsx')
Puoi anche specificare altri argomenti, come header per indicare quale riga diventa l’intestazione del DataFrame. Il valore predefinito è 0, che indica la prima riga come intestazioni o nomi di colonna. Puoi anche passare i nomi delle colonne come lista tramite l’argomento names. L’argomento index_col (predefinito None) può essere usato se il file contiene un indice di riga.
Nota: In un DataFrame o Series di pandas, l’indice è un identificatore che punta alla posizione di una riga o di una colonna. In sintesi, l’indice etichetta la riga o la colonna di un DataFrame e ti permette di accedere a una riga o colonna specifica tramite il suo indice (lo vedrai più avanti). L’indice delle righe di un DataFrame può essere un intervallo (es. da 0 a 303), una serie temporale (date o timestamp), un identificatore univoco (es. employee_ID in una tabella employees) o altri tipi di dati. Per le colonne, di solito è una stringa (che indica il nome della colonna).
Importare file Excel (più fogli)
La lettura di file Excel con più fogli non è molto diversa. Devi solo specificare un argomento aggiuntivo, sheet_name, a cui puoi passare una stringa con il nome del foglio o un intero per la posizione del foglio (nota che Python usa l’indicizzazione da 0, quindi il primo foglio è accessibile con sheet_name = 0)
# Estrazione del secondo foglio poiché Python usa l'indicizzazione da 0
df = pd.read_excel('diabetes_multi.xlsx', sheet_name=1)
Importare file JSON
In modo analogo a read_csv(), puoi usare read_json() per file JSON passando il nome del file come argomento (per maggiori dettagli leggi questo tutorial su come importare dati JSON e HTML in pandas). Il codice seguente legge un file JSON dal disco e crea un DataFrame df.
df = pd.read_json("diabetes.json")
Se vuoi saperne di più sull’importazione dei dati con pandas, dai un’occhiata a questo cheat sheet sull’importazione di vari tipi di file con Python.
Importare dati da database SQL
Per caricare dati da un database relazionale, usa pd.read_sql() insieme a una connessione al database.
import sqlite3
# Stabilisce una connessione a un database SQLite
conn = sqlite3.connect("my_database.db")
# Legge i dati da una tabella
df = pd.read_sql("SELECT * FROM my_table", conn)
Per dataset di grandi dimensioni, valuta l’uso di SQLAlchemy per ottimizzare le query.
Importare dati da un’API (formato JSON)
Se i tuoi dati provengono da una web API, pandas può leggerli direttamente usando pd.read_json():
df = pd.read_json("https://api.example.com/data.json")
Se la risposta dell’API è paginata o in formato JSON annidato, potresti aver bisogno di ulteriore elaborazione usando json_normalize() da pandas.io.json.
Esportare dati in pandas
Così come pandas può importare dati da vari formati, ti permette anche di esportarli in diversi formati. Questo capita soprattutto quando i dati vengono trasformati con pandas e devono essere salvati in locale. Di seguito come esportare DataFrame in vari formati.
Esportare un DataFrame in un file CSV
Un DataFrame di pandas (qui usiamo df) si salva come file CSV con il metodo .to_csv(). Gli argomenti includono il nome file con percorso e index – dove index = True implica scrivere l’indice del DataFrame.
df.to_csv("diabetes_out.csv", index=False)
Esportare un DataFrame in un file JSON
Esporta un DataFrame in un file JSON richiamando il metodo .to_json().
df.to_json("diabetes_out.json")
Nota: Un file JSON memorizza un oggetto tabellare come un insieme di coppie chiave-valore. Perciò potresti osservare intestazioni di colonna ripetute in un file JSON.
Esportare un DataFrame in un file di testo
Come per la scrittura di DataFrame in file CSV, puoi chiamare .to_csv(). Le uniche differenze sono che il formato di output è .txt e devi specificare un separatore tramite l’argomento sep.
df.to_csv('diabetes_out.txt', header=df.columns, index=None, sep=' ')
Esportare un DataFrame in un file Excel
Richiama .to_excel() dall’oggetto DataFrame per salvarlo come file “.xls” o “.xlsx”.
df.to_excel("diabetes_out.xlsx", index=False)
Visualizzare e comprendere i DataFrame con pandas
Dopo aver letto i dati tabellari come DataFrame, avrai bisogno di un’anteprima. Puoi visualizzare un piccolo campione del dataset o un riepilogo dei dati sotto forma di statistiche descrittive.
Come visualizzare i dati con .head() e .tail()
Puoi vedere le prime o le ultime righe di un DataFrame usando rispettivamente i metodi .head() o .tail(). Puoi specificare il numero di righe con l’argomento n (il valore predefinito è 5).
df.head()

Prime cinque righe del DataFrame
df.tail(n = 10)

Prime 10 righe del DataFrame
Comprendere i dati con .describe()
Il metodo .describe() stampa le statistiche riassuntive di tutte le colonne numeriche, come conteggio, media, deviazione standard, range e quartili delle colonne numeriche.
df.describe()

Ottieni statistiche descrittive con .describe()
Offre uno sguardo rapido alla scala, alla skewness e all’intervallo dei dati numerici.
Puoi anche modificare i quartili usando l’argomento percentiles. Qui, ad esempio, osserviamo i percentili 30%, 50% e 70% delle colonne numeriche nel DataFrame df.
df.describe(percentiles=[0.3, 0.5, 0.7])

Ottieni statistiche descrittive con percentili specifici
Puoi anche isolare particolari tipi di dato nel riepilogo usando l’argomento include. Qui, ad esempio, stiamo riassumendo solo le colonne con tipo di dato integer.
df.describe(include=[int])

Ottieni statistiche descrittive solo per le colonne intere
Allo stesso modo, potresti voler escludere alcuni tipi di dato usando l’argomento exclude.
df.describe(exclude=[int])

Ottieni statistiche descrittive solo per le colonne non intere
Spesso è più comodo visualizzare tali statistiche trasponendole con l’attributo .T.
df.describe().T

Trasponi le statistiche descrittive con .T
Per maggiori informazioni sulla descrizione dei DataFrame, consulta il seguente cheat sheet.
Comprendere i dati con .info()
Il metodo .info() è un modo rapido per dare un’occhiata ai tipi di dato, ai valori mancanti e alla dimensione dei dati di un DataFrame. Qui impostiamo l’argomento show_counts su True, che mostra una vista del numero totale di valori non mancanti in ogni colonna. Impostiamo anche memory_usage su True, che mostra l’uso totale di memoria degli elementi del DataFrame. Quando verbose è impostato su True, stampa il riepilogo completo di .info().
df.info(show_counts=True, memory_usage=True, verbose=True)
Comprendere i dati con .shape
Il numero di righe e colonne di un DataFrame può essere identificato usando l’attributo .shape. Restituisce una tupla (righe, colonne) e può essere indicizzato per ottenere solo il numero di righe o solo il numero di colonne.
df.shape # Get the number of rows and columns
df.shape[0] # Get the number of rows only
df.shape[1] # Get the number of columns only
(768,9)
768
9
Ottenere tutte le colonne e i nomi delle colonne
Richiamare l’attributo .columns di un DataFrame restituisce i nomi delle colonne sotto forma di oggetto Index. Ricorda: un indice di pandas è l’indirizzo/etichetta della riga o della colonna.
df.columns

Può essere convertito in una lista usando la funzione list().
list(df.columns)

Verificare i valori mancanti in pandas con .isnull()
Il DataFrame di esempio non ha valori mancanti. Aggiungiamone alcuni per rendere le cose più interessanti. Il metodo .copy() crea una copia del DataFrame originale. Questo serve a garantire che eventuali modifiche alla copia non si riflettano nel DataFrame originale. Usando .loc (ne parleremo più avanti), puoi impostare le righe dalla due alla cinque della colonna Pregnancies su valori NaN, che indicano valori mancanti.
df2 = df.copy()
df2.loc[2:5,'Pregnancies'] = None
df2.head(7)

Come vedi, ora le righe da 2 a 5 sono NaN
Puoi verificare se ciascun elemento in un DataFrame è mancante usando il metodo .isnull().
df2.isnull().head(7)
Dato che spesso è più utile sapere quanti valori mancanti hai, puoi combinare .isnull() con .sum() per contare il numero di null in ogni colonna.
df2.isnull().sum()
Pregnancies 4
Glucose 0
BloodPressure 0
SkinThickness 0
Insulin 0
BMI 0
DiabetesPedigreeFunction 0
Age 0
Outcome 0
dtype: int64
Puoi anche fare una doppia somma per ottenere il numero totale di null nel DataFrame.
df2.isnull().sum().sum()
4
Ordinare, effettuare slicing ed estrarre dati in pandas
Il pacchetto pandas offre diversi modi per ordinare, suddividere, filtrare e isolare i dati nei tuoi DataFrame. Qui vedremo i modi più comuni.
Ordinare i dati
Per ordinare un DataFrame in base a una colonna specifica:
df.sort_values(by="Age", ascending=False, inplace=True) # Sort by Age in descending order
Puoi ordinare per più colonne:
df.sort_values(by=["Age", "Glucose"], ascending=[False, True], inplace=True)
Reimpostare l’indice
Se filtri o ordini un DataFrame, l’indice potrebbe non essere più allineato. Usa .reset_index() per sistemarlo:
df.reset_index(drop=True, inplace=True) # Resets index and removes old index column
Filtrare i dati usando condizioni
Per estrarre dati in base a una condizione:
df[df["BloodPressure"] > 100] # Selects rows where BloodPressure is greater than 100
Isolare una colonna usando [ ]
Puoi isolare una singola colonna usando le parentesi quadre [ ] con il nome della colonna al loro interno. L’output è un oggetto Series di pandas. Una Series di pandas è un array monodimensionale che contiene dati di qualsiasi tipo, inclusi interi, float, stringhe, booleani, oggetti Python, ecc. Un DataFrame è composto da molte Series che fungono da colonne.
df['Outcome']

Isolare una colonna in pandas
Isolare due o più colonne usando [[ ]]
Puoi anche fornire una lista di nomi di colonna all’interno delle parentesi quadre per recuperare più di una colonna. Qui le parentesi quadre sono usate in due modi diversi. Usiamo le parentesi esterne per indicare un sottoinsieme di un DataFrame e quelle interne per creare una lista.
df[['Pregnancies', 'Outcome']]

Isolare due colonne in pandas
Isolare una riga usando [ ]
Una singola riga può essere recuperata passando una Series booleana con un solo valore True. Nell’esempio sotto, viene restituita la seconda riga con index = 1. Qui .index restituisce le etichette delle righe del DataFrame e il confronto le trasforma in un array monodimensionale di booleani.
df[df.index==1]

Isolare una riga in pandas
Isolare due o più righe usando [ ]
Allo stesso modo, due o più righe possono essere restituite usando il metodo .isin() invece dell’operatore ==.
df[df.index.isin(range(2,10))]

Isolare righe specifiche in pandas
Usare .loc[] e .iloc[] per recuperare righe
Puoi recuperare righe specifiche tramite etichette o condizioni usando .loc[] e .iloc[] ("location" e "integer location"). .loc[] usa un’etichetta per puntare a una riga, colonna o cella, mentre .iloc[] usa la posizione numerica. Per capire la differenza tra i due, modifichiamo l’indice di df2 creato in precedenza.
df2.index = range(1,769)
L’esempio sotto restituisce una Series di pandas invece di un DataFrame. Il 1 rappresenta l’indice (etichetta) della riga, mentre il 1 in .iloc[] è la posizione della riga (prima riga).
df2.loc[1]
Pregnancies 6.000
Glucose 148.000
BloodPressure 72.000
SkinThickness 35.000
Insulin 0.000
BMI 33.600
DiabetesPedigreeFunction 0.627
Age 50.000
Outcome 1.000
Name: 1, dtype: float64
df2.iloc[1]
Pregnancies 1.000
Glucose 85.000
BloodPressure 66.000
SkinThickness 29.000
Insulin 0.000
BMI 26.600
DiabetesPedigreeFunction 0.351
Age 31.000
Outcome 0.000
Name: 2, dtype: float64
Puoi anche recuperare più righe fornendo un intervallo tra parentesi quadre.
df2.loc[100:110]

Isolare righe in pandas con .loc[]
df2.iloc[100:110]
![Isolating rows in pandas with .loc[]](https://images.datacamp.com/image/upload/v1668597143/image28_07af2245c8.png)
Isolare righe in pandas con .iloc[]
Puoi anche fare subset con .loc[] e .iloc[] usando una lista invece di un intervallo.
df2.loc[[100, 200, 300]]
![Isolating rows using a list in pandas with .loc[]](https://images.datacamp.com/image/upload/v1668597142/image31_c5acf2a9bd.png)
Isolare righe usando una lista con .loc[]
df2.iloc[[100, 200, 300]]

Isolare righe usando una lista con .iloc[]
Puoi anche selezionare colonne specifiche insieme alle righe. Qui .iloc[] differisce da .loc[]: richiede la posizione delle colonne e non le etichette.
df2.loc[100:110, ['Pregnancies', 'Glucose', 'BloodPressure']]
![Isolating columns using a list in pandas with .loc[]](https://images.datacamp.com/image/upload/v1668597142/image7_40bb6ca301.png)
Isolare colonne in pandas con .loc[]
df2.iloc[100:110, :3]
![Isolating columns using in pandas with .iloc[]](https://images.datacamp.com/image/upload/v1668597143/image42_bf1e7b2f49.png)
Isolare colonne con .iloc[]
Per flussi di lavoro più rapidi, puoi passare l’indice di partenza di una riga come intervallo.
df2.loc[760:, ['Pregnancies', 'Glucose', 'BloodPressure']]
![Isolating columns using in pandas with .loc[]](https://images.datacamp.com/image/upload/v1668597142/image33_863cb34962.png)
Isolare colonne e righe in pandas con .loc[]
df2.iloc[760:, :3]

Isolare colonne e righe in pandas con .iloc[]
Puoi aggiornare/modificare determinati valori usando l’operatore di assegnazione =
df2.loc[df['Age']==81, ['Age']] = 80
Slicing condizionale (che rispetta determinate condizioni)
pandas ti permette di filtrare i dati in base a condizioni sui valori di righe/colonne. Ad esempio, il codice sotto seleziona la riga in cui la pressione sanguigna è esattamente 122. Qui stiamo isolando righe usando le parentesi [ ] come visto nelle sezioni precedenti. Tuttavia, invece di inserire indici di riga o nomi di colonna, inseriamo una condizione in cui la colonna BloodPressure è uguale a 122. Indichiamo questa condizione con df.BloodPressure == 122.
df[df.BloodPressure == 122]

Isolare righe in base a una condizione in pandas
L’esempio sottostante recupera tutte le righe in cui Outcome è 1. Qui df.Outcome seleziona quella colonna, df.Outcome == 1 restituisce una Series di valori booleani che determinano quali Outcome sono uguali a 1, quindi [] prende un sottoinsieme di df in cui quella Series booleana è True.
df[df.Outcome == 1]

Isolare righe in base a una condizione in pandas
Puoi usare un operatore > per confronti. Il codice seguente recupera Pregnancies, Glucose e BloodPressure per tutti i record con BloodPressure maggiore di 100.
df.loc[df['BloodPressure'] > 100, ['Pregnancies', 'Glucose', 'BloodPressure']]
Isolare righe e colonne in base a una condizione in pandas
Pulire i dati con pandas
La pulizia dei dati è una delle attività più comuni in data science. pandas ti permette di preprocessare i dati per qualsiasi uso, incluso (ma non solo) l’addestramento di modelli di machine learning e deep learning. Usiamo il DataFrame df2 di prima, con quattro valori mancanti, per illustrare alcuni casi d’uso di pulizia dati. Come promemoria, ecco come vedere quanti valori mancanti ci sono in un DataFrame.
df2.isnull().sum()
Pregnancies 4
Glucose 0
BloodPressure 0
SkinThickness 0
Insulin 0
BMI 0
DiabetesPedigreeFunction 0
Age 0
Outcome 0
dtype: int64
Tecnica #1 per gestire i dati mancanti: eliminare i valori mancanti
Un modo per gestire i dati mancanti è eliminarli. Questo è particolarmente utile quando hai molti dati e perdere una piccola porzione non influirà sull’analisi a valle. Puoi usare il metodo .dropna() come mostrato sotto. Qui salviamo i risultati di .dropna() in un DataFrame df3.
df3 = df2.copy()
df3 = df3.dropna()
df3.shape
(764, 9) # this is 4 rows less than df2
L’argomento axis ti permette di specificare se stai eliminando righe o colonne con valori mancanti. L’axis predefinito rimuove le righe contenenti NaN. Usa axis = 1 per rimuovere le colonne con uno o più valori NaN. Nota anche come usiamo l’argomento inplace=True, che ti permette di evitare di salvare l’output di .dropna() in un nuovo DataFrame.
df3 = df2.copy()
df3.dropna(inplace=True, axis=1)
df3.head()

Eliminare dati mancanti in pandas
Puoi anche eliminare sia righe sia colonne con valori mancanti impostando l’argomento how su 'all'
df3 = df2.copy()
df3.dropna(inplace=True, how='all')
Tecnica #2 per gestire i dati mancanti: sostituire i valori mancanti
Invece di eliminare, sostituire i valori mancanti con una statistica riassuntiva o un valore specifico (a seconda del caso d’uso) può essere la scelta migliore. Ad esempio, se manca un valore nella colonna delle temperature che rappresenta le temperature durante i giorni della settimana, sostituire quel valore con la temperatura media della settimana può essere più efficace che eliminarlo del tutto. Puoi sostituire i dati mancanti con la media di riga o di colonna usando il codice seguente.
df3 = df2.copy()
# Get the mean of Pregnancies
mean_value = df3['Pregnancies'].mean()
# Fill missing values using .fillna()
df3 = df3.fillna(mean_value)
Gestire i duplicati
Aggiungiamo alcuni duplicati ai dati originali per imparare come eliminarli da un DataFrame. Qui usiamo il metodo .concat() per concatenare le righe di df2 a df2, aggiungendo duplicati perfetti di ogni riga in df2.
df3 = pd.concat([df2, df2])
df3.shape
(1536, 9)
Puoi rimuovere tutte le righe duplicate (impostazione predefinita) dal DataFrame usando il metodo .drop_duplicates().
df3 = df3.drop_duplicates()
df3.shape
(768, 9)
Rinominare le colonne
Un’attività di pulizia dati comune è rinominare le colonne. Con il metodo .rename() puoi usare columns come argomento per rinominare colonne specifiche. Il codice seguente mostra il dizionario per mappare vecchi e nuovi nomi.
df3.rename(columns = {'DiabetesPedigreeFunction':'DPF'}, inplace = True)
df3.head()

Rinominare colonne in pandas
Puoi anche assegnare direttamente i nomi delle colonne come lista al DataFrame.
df3.columns = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DPF', 'Age', 'Outcome', 'STF']
df3.head()

Rinominare colonne in pandas
Per approfondire la pulizia dei dati, e per flussi di lavoro più semplici e prevedibili, consulta la seguente checklist, che fornisce un set completo di comuni attività di data cleaning.
Analisi dei dati in pandas
Il principale valore aggiunto di pandas risiede nelle sue funzionalità per un’analisi rapida dei dati. In questa sezione ci concentreremo su un insieme di tecniche di analisi utilizzabili in pandas.
Operatori riassuntivi (media, moda, mediana)
Come hai visto in precedenza, puoi ottenere la media di ciascuna colonna con il metodo .mean().
df.mean()

Stampa della media delle colonne in pandas
La moda può essere calcolata in modo analogo con il metodo .mode().
df.mode()

Stampa della moda delle colonne in pandas
Allo stesso modo, la mediana di ciascuna colonna si calcola con il metodo .median()
df.median()

Stampa della mediana delle colonne in pandas
Creare nuove colonne a partire da colonne esistenti
pandas fornisce calcoli veloci ed efficienti combinando due o più colonne come variabili scalari. Il codice seguente divide ciascun valore nella colonna Glucose per il corrispondente valore nella colonna Insulin per calcolare una nuova colonna chiamata Glucose_Insulin_Ratio.
df2['Glucose_Insulin_Ratio'] = df2['Glucose']/df2['Insulin']
df2.head()

Creare una nuova colonna da colonne esistenti in pandas
Contare con .value_counts()
Spesso lavorerai con valori categorici e vorrai contare il numero di osservazioni che ogni categoria ha in una colonna. I valori di categoria possono essere contati con il metodo .value_counts(). Qui, ad esempio, contiamo il numero di osservazioni in cui l’Outcome è diabetico (1) e il numero di osservazioni in cui l’Outcome è non diabetico (0).
df['Outcome'].value_counts()

Usare .value_counts() in pandas
Aggiungendo l’argomento normalize ottieni proporzioni invece di conteggi assoluti.
df['Outcome'].value_counts(normalize=True)

Usare .value_counts() in pandas con normalizzazione
Disattiva l’ordinamento automatico dei risultati usando l’argomento sort (predefinito True). L’ordinamento predefinito è basato sui conteggi in ordine decrescente.
df['Outcome'].value_counts(sort=False)

Usare .value_counts() in pandas con ordinamento
Puoi anche applicare .value_counts() a un oggetto DataFrame e a colonne specifiche al suo interno, non solo a una singola colonna. Qui, ad esempio, applichiamo value_counts() a df con l’argomento subset, che accetta una lista di colonne.
df.value_counts(subset=['Pregnancies', 'Outcome'])

Usare .value_counts() in pandas mentre si fa subset delle colonne
Aggregare i dati con .groupby() in pandas
pandas ti permette di aggregare i valori raggruppandoli per valori specifici di colonna. Puoi farlo combinando il metodo .groupby() con un metodo riassuntivo a tua scelta. Il codice sotto mostra la media di ciascuna delle colonne numeriche raggruppate per Outcome.
df.groupby('Outcome').mean()

Aggregare i dati per una colonna in pandas
.groupby() consente il raggruppamento per più di una colonna passando una lista di nomi di colonna, come mostrato sotto.
df.groupby(['Pregnancies', 'Outcome']).mean()

Aggregare i dati per due colonne in pandas
Qualsiasi metodo riassuntivo può essere usato insieme a .groupby(), tra cui .min(), .max(), .mean(), .median(), .sum(), .mode() e altri.
Tabelle pivot
pandas consente anche di calcolare statistiche riassuntive come tabelle pivot. Questo rende più facile trarre conclusioni sulla base di una combinazione di variabili. Il codice seguente imposta le righe come valori unici di Pregnancies, le colonne come valori unici di Outcome e le celle come valore medio di BMI nel gruppo corrispondente.
Ad esempio, per Pregnancies = 5 e Outcome = 0, il BMI medio risulta 31,1.
pd.pivot_table(df, values="BMI", index='Pregnancies',
columns=['Outcome'], aggfunc='mean')

Aggregare i dati con il pivoting in pandas
Visualizzazione dei dati in pandas
pandas fornisce dei wrapper di comodo alle funzioni di plotting di Matplotlib per facilitare la visualizzazione dei tuoi DataFrame. Di seguito vedrai come realizzare le visualizzazioni più comuni con pandas.
Line plot in pandas
pandas ti permette di tracciare le relazioni tra variabili usando i grafici a linee. Di seguito un line plot di BMI e Glucose rispetto all’indice di riga.
df[['BMI', 'Glucose']].plot.line()

Line plot di base con pandas
Puoi scegliere i colori usando l’argomento color.
df[['BMI', 'Glucose']].plot.line(figsize=(20, 10),
color={"BMI": "red", "Glucose": "blue"})

Line plot di base con pandas, con colori personalizzati
Tutte le colonne di df possono anche essere tracciate su scale e assi diversi usando l’argomento subplots.
df.plot.line(subplots=True)
Sottotrame per line plot con pandas
Bar plot in pandas
Per colonne discrete, puoi usare un grafico a barre sui conteggi delle categorie per visualizzarne la distribuzione. La variabile Outcome con valori binari è visualizzata sotto.
df['Outcome'].value_counts().plot.bar()
Bar plot in pandas
Box plot in pandas
La distribuzione in quartili delle variabili continue può essere visualizzata con un box plot. Il codice seguente ti permette di creare un box plot con pandas.
df.boxplot(column=['BMI'], by='Outcome')

Box plot in pandas
Per saperne di più su pandas
Il tutorial sopra tocca solo la superficie di ciò che è possibile con pandas. Che si tratti di analizzare, visualizzare, filtrare o aggregare dati, pandas offre un set di funzionalità incredibilmente ricco che accelera qualsiasi flusso di lavoro sui dati. Inoltre, combinando pandas con altri pacchetti di data science, potrai creare dashboard interattive, modelli predittivi con il machine learning, automatizzare flussi di lavoro sui dati e altro ancora. Dai un’occhiata alle risorse qui sotto per accelerare il tuo percorso di apprendimento su pandas:
- [Cheat sheet] Una pletora di cheat sheet su Python e pandas da consultare durante l’apprendimento
- [Live training] Scopri le nostre sessioni gratuite di live code-along, molte delle quali usano pandas
- [Altri tutorial] Dai un’occhiata ai nostri altri tutorial su pandas e sull’ecosistema PyData, tra cui come implementare le medie mobili in pandas e l’uso del metodo .apply() di pandas
FAQ su pandas
Che cos’è pandas in Python?
pandas è una potente libreria di manipolazione dei dati in Python. Fornisce le strutture dati e le funzioni necessarie per manipolare dati strutturati, incluse funzionalità per manipolare e analizzare i DataFrame. È uno strumento indispensabile nel mondo dell’analisi dei dati e della data science perché consente una pulizia, trasformazione e analisi dei dati efficienti.
Perché dovrei imparare pandas?
Se lavori con i dati in Python, pandas è praticamente un must. Semplifica la gestione e l’analisi dei dati, così puoi concentrarti sull’estrazione di insight e sulla creazione di valore. Che tu stia gestendo piccoli dataset o dati su larga scala, pandas ti semplificherà la vita grazie a velocità, flessibilità e strutture dati intuitive.
Come installo pandas?
Per installare pandas, ti servono Python e pip (il gestore pacchetti di Python) sul sistema. Puoi quindi installare pandas con il comando: pip install pandas. Se usi un notebook Jupyter in un ambiente come Anaconda, pandas è preinstallato.
Quali sono le strutture dati di base in pandas?
Le due principali strutture dati in pandas sono Series e DataFrame. Una Series è in sostanza una colonna, e un DataFrame è una tabella multidimensionale composta da una raccolta di Series. Queste strutture sono flessibili: possono contenere dati di tipi diversi (per esempio, integer, string, float).
pandas è adatto a grandi dataset?
Sì, pandas è un’ottima scelta per dataset di grandi dimensioni. È progettato per un’analisi efficiente dei dati, inclusi quelli grandi. Tieni però presente che la dimensione dei dati gestibili dipende in parte dalla memoria del tuo sistema. Se lavori con dataset estremamente grandi che non entrano in memoria, potresti dover usare altri strumenti o tecniche (come il chunking o l’uso di dask).
Come importo i dati in pandas?
pandas può leggere dati da vari formati di file come CSV, Excel, database SQL, JSON e altro. I comandi pd.read_csv(), pd.read_excel(), pd.read_sql() e pd.read_json() servono per importare dati dai rispettivi formati. Tutti questi comandi restituiscono un DataFrame, che puoi manipolare con pandas.
Sono una stratega ed eticista dell’AI che lavora all’intersezione tra data science, prodotto e ingegneria per creare sistemi di machine learning scalabili. Inserita tra i "Top 200 Business and Technology Innovators" al mondo, ho la missione di democratizzare il machine learning e di eliminare il gergo tecnico affinché tutti possano partecipare a questa trasformazione.






