Pandas รจ una potente libreria open-source per la manipolazione e l'analisi dei dati in Python. ร ampiamente utilizzata nel mondo dellโanalisi dati, del machine learning e della data science per la gestione di dati strutturati e tabellari. La libreria fornisce strumenti flessibili e intuitivi per importare, esplorare, pulire, trasformare e analizzare dati in modo efficace.
Caratteristiche
Pandas offre diverse caratteristiche che la rendono una libreria indispensabile per lโanalisi dei dati:
- Strutture Dati Potenti: Pandas introduce due principali strutture dati, il DataFrame e la Serie. Il DataFrame รจ una tabella bidimensionale simile a un foglio di calcolo, mentre la Serie รจ un array unidimensionale con etichette.
- Importazione e Esportazione dei Dati: Pandas supporta una vasta gamma di formati dati, inclusi CSV, Excel, SQL, JSON, HTML e molti altri. ร possibile importare dati da molte fonti diverse e esportare i risultati in vari formati.
- Indicizzazione Etichettata: Pandas consente di assegnare etichette personalizzate alle righe e alle colonne dei DataFrame, semplificando la ricerca e lโaccesso ai dati.
- Operazioni Flessibili: Pandas offre numerosi metodi per la manipolazione dei dati, tra cui selezione, filtraggio, ordinamento, raggruppamento, aggregazione e molto altro. ร possibile applicare queste operazioni in modo semplice e intuitivo.
- Gestione di Dati Mancanti: La libreria offre strumenti avanzati per la gestione dei dati mancanti, consentendo di riempire, rimuovere o sostituire i valori mancanti in modo efficace.
- Integrazione con NumPy: Pandas รจ integrato con NumPy, unโaltra libreria fondamentale per lโanalisi dei dati in Python. Ciรฒ significa che รจ possibile utilizzare le funzionalitร di NumPy allโinterno di Pandas.
DataFrame
Un ==DataFrame
รจ una struttura dati bidimensionale simile a una tabella o uno spreadsheet. ร composto da righe e colonne, e ogni colonna puรฒ contenere dati di tipo diverso==.
Un DataFrame
รจ fondamentalmente una raccolta di Serie
, dove ogni colonna rappresenta una Serie. Ecco alcune caratteristiche principali dei DataFrame
:
- Dati Ibridi: I
DataFrame
possono contenere dati eterogenei, il che significa che le colonne possono contenere diversi tipi di dati. - Indici delle Righe e Etichette delle Colonne: I DataFrame hanno indici per le righe e etichette per le colonne, consentendo un accesso flessibile ai dati.
- Operazioni su Colonne e Righe: ร possibile eseguire operazioni su singole colonne o su righe intere del DataFrame.
- Utilizzo: I
DataFrame
sono ampiamente utilizzati per rappresentare e analizzare dati tabellari, come i dati di un database o di un file CSV. Sono la struttura dati piรน comunemente utilizzata in Pandas.
Ecco come creare un DataFrame in Pandas:
import pandas as pd
# Creazione di un DataFrame da un dizionario
df = pd.DataFrame({'Yes': [50, 21], 'No': [131, 2]})
print(df)
I DataFrame
offrono una flessibilitร incredibile nella gestione e nellโanalisi dei dati: รจ possibile eseguire una vasta gamma di operazioni, tra cui filtraggio, selezione, raggruppamento, aggregazione, calcolo di statistiche, operazioni di join e molto altro.
read_csv
Lโoperazione piรน comune per creare un dataframe รจ tramite un csv tramite il comando read_csv
wine_reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv")
Qualora il csv contenga giร una colonna per lโindice, per esempio un csv di una tabella compresa la colonna id
possiamo utilizzare il parametro index_col
per esplicitare la colonna contenente tale indice
wine_reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
Informazioni sul dataframe
shape
: permette di sapere numero di righe e colonnedescribe
: offre panoramica dei dati, quindi, per ogni colonna, il numero di elementi, la media, la std e il numero di elementi al 25, 50 e 75 percentile, oltre che al numero piรน alto.
Indexing
Index based
Pandas permette di selezionare un dati a partire dalla loro posizione allโintero del dataframe usando la funzione iloc
utilizzando lโindice di dove si trova il dato che mi serve.
Attenzione che la notazione รจ prima la riga e successivamente la colonna e non il contrario come avviene in python classico.
Alcuni esempi:
- Ottenere la prima riga:
data.iloc[0]
- Ottenere la prima colonna:
data.iloc[:, 0]
- Ottieni le prime 3 righe della prima colonna:
data.iloc[:3, 0]
- Ottieni le ultime 5 righe della prima colonna:
data.iloc[-5:, 0]
- Ottieni la seconda e la terza riga della prima colonna:
data.iloc[1:3, 0]
iloc
utilizza lo schema di indicizzazione stdlib di Python, in cui il primo elemento dellโintervallo รจ incluso e lโultimo escluso. Quindi 0:10
selezionerร le voci 0,...,9
.
Label based
Pandas permette di selezionare un dati a partire dalla loro posizione allโintero del dataframe usando la funzione loc
utilizzando la label di dove si trova il dato che mi serve.
Per esempio se voglio ottenere il contenuto della cella della colonna country
della prima riga di un dataframe scrivo reviews.loc[0, 'country']
.
Dato che spesso i dataset hanno label spesso รจ piรน comodo usare il metodo loc
, per esempio qui seleziono solo un sottoinsieme di colonne identificate da un name: `reviews.loc[:, [โtaster_nameโ, โtaster_twitter_handleโ, โpointsโ]]
loc
, indicizza in modo inclusivo a differenza di iloc
. Quindi 0:10
selezionerร le voci `0,โฆ,10.
loc
puรฒ essere usata anche insieme a dei filtraggi, per esempio per sapere tutti i vini italiani con punteggio maggiore di 90 posso fare reviews.loc[(reviews.country == 'Italy') & (reviews.points >= 90)]
.
Posso usare anche il metodo isin
per scrivere un filtraggio in OR, per esempio questo comando fornisce tutti i vini italiani o francesi reviews.loc[reviews.country.isin(['Italy', 'France'])]
.
Operazioni Comuni
Ecco alcune delle operazioni comuni eseguite su Serie
e DataFrame
in Pandas:
Selezione di una colonna
Una delle operazioni piรน comuni รจ la selezione di una colonna, per esempio se voglio selezionare la colonna su cui voglio fare le predizioni. Esistono due notazioni per selezionare una colonna
# Standard notation
colonna = df["Nome"]
# Dot notation
colonna = df.Nome
e la piรน moderna รจ sicuramente la dot-notation.
Selezione di una serie di colonne
Qualora voglia considerare solo un sottoinsieme delle colonna del dataframe di partenza posso definire il sottoinsieme come una array di stringhe di nomi e poi usare la seguente sintassi:
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
# X contiene solo le colonne definite sopra
X = melbourne_data[melbourne_features]
Primi n dati
primi_5_record = df.head(5)
Filtraggio dei Dati:
# Filtraggio dei dati in base a una condizione
df_filtrato = df[df['Etร '] > 30]
Operazioni Aggregazione:
# Calcolo della media per una colonna
media_etร = df['Etร '].mean()
Aggiunta di Nuove Colonne:
# Aggiunta di una nuova colonna basata su calcoli
df['Anno_di_Nascita'] = 2023 - df['Etร ']
Raggruppamento e Aggregazione:
# Raggruppamento per una colonna e calcolo della media
media_etร _per_nome = df.groupby('Nome')['Etร '].mean()
Unione di DataFrame:
# Concat (semplice)
canadian_youtube = pd.read_csv("../input/youtube-new/CAvideos.csv")
british_youtube = pd.read_csv("../input/youtube-new/GBvideos.csv")
pd.concat([canadian_youtube, british_youtube])
# Join (medio): combina dataframe che hanno un index in comune. Permette di aggiungere suffissi per le colonne comuni
left = canadian_youtube.set_index(['title', 'trending_date'])
right = british_youtube.set_index(['title', 'trending_date'])
left.join(right, lsuffix='_CAN', rsuffix='_UK')
# Merge (complesso)
df1 = pd.DataFrame({'Chiave': ['A', 'B'], 'Valore1': [1, 2]})
df2 = pd.DataFrame({'Chiave': ['B', 'C'], 'Valore2': [3, 4]})
risultato = pd.merge(df1, df2, on='Chiave')
Series
Una Serie
in Pandas รจ una struttura dati unidimensionale che puรฒ contenere dati di qualsiasi tipo ma omogenei, tra cui numeri interi, float, stringhe, oggetti complessi e altro. Come fosse un array di un linguaggio fortemente tipizzato.
Ogni elemento in una Serie รจ associato a unโetichetta o un indice.
Gli indici possono essere etichette personalizzate o interi predefiniti che iniziano da zero.
Ecco alcune caratteristiche principali delle Serie
:
- Dati Omogenei: Le Serie contengono dati omogenei, il che significa che tutti gli elementi devono essere dello stesso tipo di dati.
- Etichette degli Indici: Ogni elemento della Serie ha unโetichetta di indice che consente di accedere a un elemento specifico.
- Operazioni Vettoriali: Le operazioni su Serie in Pandas sono in genere vettoriali, il che significa che รจ possibile eseguire operazioni su tutta la Serie in modo efficiente.
- Utilizzo: Le Serie sono utilizzate per rappresentare una singola colonna di dati e sono spesso utilizzate in contesti in cui รจ necessario lavorare con una singola dimensione di dati, ad esempio le altezze di una lista di persone.
Ecco come creare una Serie in Pandas:
import pandas as pd
# Creazione di una Serie
serie = pd.Series([10, 20, 30, 40, 50])
print(serie)
Operazioni
Pandas permette di eseguire varie operazioni sui dati, tra cui il filtraggio dei dati, il raggruppamento, lโaggregazione e il calcolo di statistiche.
Filtraggi
Ad esempio, รจ possibile filtrare le righe del DataFrame
in base a una condizione:
df_filtrato = df[df['Etร '] > 30]
Raggruppamenti
ร possibile raggruppare i dati in base a una colonna e calcolare la media:
media_eta_per_nome = df.groupby('Nome')['Etร '].mean()
Gestione dei Dati Mancanti
Pandas fornisce strumenti per gestire dati mancanti, inclusi i metodi dropna()
per rimuovere righe o colonne con dati mancanti e fillna()
per riempire valori mancanti con dati specifici.
# Rimuove le righe con dati mancanti
df_senza_dati_mancanti = df.dropna()
# Riempie i dati mancanti con un valore specifico
df_riempito = df.fillna(0)
Rimozione di righe o colonne
La funzione drop
in Pandas viene utilizzata per eliminare righe o colonne da un DataFrame. Per farlo, รจ necessario specificare lโetichetta delle righe o delle colonne che si desidera rimuovere
Eliminare righe
import pandas as pd
# Creare un DataFrame di esempio
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# Eliminare la riga con indice 1
df = df.drop(1)
# Il risultato sarร un DataFrame senza la riga con indice 1
print(df)
Output:
A B
0 1 4
2 3 6
Eliminare colonne
# Creare un DataFrame di esempio
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# Eliminare la colonna 'B'
df = df.drop('B', axis=1)
# Il risultato sarร un DataFrame senza la colonna 'B'
print(df)
Output:
A
0 1
1 2
2 3
Nellโesempio sopra, abbiamo rimosso la colonna โBโ dal DataFrame df
.
ร importante notare che abbiamo specificato axis=1
per indicare che vogliamo eliminare una colonna. Se non specifichi axis
, il comportamento predefinito sarร eliminare righe.
Puoi anche eliminare piรน righe o colonne passando una lista di etichette:
import pandas as pd
# Creare un DataFrame di esempio
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
# Eliminare piรน colonne
df = df.drop(['B', 'C'], axis=1)
# Il risultato sarร un DataFrame senza le colonne 'B' e 'C'
print(df)
Calcolo delle Statistiche di Base
media_etร = df['Etร '].mean()
massima_etร = df['Etร '].max()
minima_etร = df['Etร '].min()
conteggio_nomi = df['Nome'].value_counts()
Lettura e scrittura
df = pd.read_csv('dati.csv')
df.to_csv('dati_salvati.csv', index=False)