Lettura di dati tabellari in DataFrames
Ultimo aggiornamento il 2025-11-06 | Modifica questa pagina
Panoramica
Domande
- Come si leggono i dati di una tabella?
Obiettivi
- Importare la libreria Pandas.
- Utilizzare Pandas per caricare un semplice set di dati CSV.
- Ottenere alcune informazioni di base su un Pandas DataFrame.
Utilizzare la libreria Pandas per eseguire statistiche su dati di una tabella.
- Pandas è una libreria Python molto utilizzata per le statistiche, in particolare per leggere e manipolare tabelle.
- Prende in prestito molte caratteristiche dai dataframe di R.
- Una tabella bidimensionale le cui colonne hanno nomi e potenzialmente tipi di dati diversi.
- Caricare Pandas con
import pandas as pd. L’aliaspdè comunemente usato per riferirsi alla libreria Pandas nel codice. - Leggere un file di dati CSV (Comma Separated Values) con
pd.read_csv.- L’argomento è il nome del file da leggere.
- Restituisce un dataframe che può essere assegnato a una variabile
PYTHON
import pandas as pd
data_oceania = pd.read_csv('data/gapminder_gdp_oceania.csv')
print(data_oceania)
OUTPUT
country gdpPercap_1952 gdpPercap_1957 gdpPercap_1962 \
0 Australia 10039.59564 10949.64959 12217.22686
1 New Zealand 10556.57566 12247.39532 13175.67800
gdpPercap_1967 gdpPercap_1972 gdpPercap_1977 gdpPercap_1982 \
0 14526.12465 16788.62948 18334.19751 19477.00928
1 14463.91893 16046.03728 16233.71770 17632.41040
gdpPercap_1987 gdpPercap_1992 gdpPercap_1997 gdpPercap_2002 \
0 21888.88903 23424.76683 26997.93657 30687.75473
1 19007.19129 18363.32494 21050.41377 23189.80135
gdpPercap_2007
0 34435.36744
1 25185.00911
- Le colonne di un dataframe sono le variabili osservate e le righe sono le osservazioni.
- Pandas usa la backslash
\per mostrare le righe avvolte quando l’output è troppo ampio per adattarsi allo schermo. - L’uso di nomi descrittivi per i dataframe ci aiuta a distinguere tra più dataframe, in modo da evitare di sovrascrivere accidentalmente un dataframe o di leggere da quello sbagliato.
File non trovato
Le nostre lezioni memorizzano i loro file di dati in una
sottodirectory data, motivo per cui il percorso del file è
data/gapminder_gdp_oceania.csv. Se si dimentica di
includere data/, o se lo si include ma la propria copia del
file si trova da qualche altra parte, si otterrà un runtime error che termina con una riga come
questa:
ERRORE
FileNotFoundError: [Errno 2] No such file or directory: 'data/gapminder_gdp_oceania.csv'
Usare index_col per specificare che i valori di una
colonna devono essere usati come intestazioni di riga.
- Le intestazioni delle righe sono numeri (0 e 1 in questo caso).
- Si vuole davvero indicizzare per paese.
- Per eseguire questa operazione, passare il nome della colonna a
read_csvcome parametroindex_col. - Il nome del dataframe
data_oceania_countryci dice quale regione include i dati (oceania) e come sono indicizzati (country).
PYTHON
data_oceania_country = pd.read_csv('data/gapminder_gdp_oceania.csv', index_col='country')
print(data_oceania_country)
OUTPUT
gdpPercap_1952 gdpPercap_1957 gdpPercap_1962 gdpPercap_1967 \
country
Australia 10039.59564 10949.64959 12217.22686 14526.12465
New Zealand 10556.57566 12247.39532 13175.67800 14463.91893
gdpPercap_1972 gdpPercap_1977 gdpPercap_1982 gdpPercap_1987 \
country
Australia 16788.62948 18334.19751 19477.00928 21888.88903
New Zealand 16046.03728 16233.71770 17632.41040 19007.19129
gdpPercap_1992 gdpPercap_1997 gdpPercap_2002 gdpPercap_2007
country
Australia 23424.76683 26997.93657 30687.75473 34435.36744
New Zealand 18363.32494 21050.41377 23189.80135 25185.00911
Usare il metodo DataFrame.info() per saperne di più su
un dataframe.
OUTPUT
<class 'pandas.core.frame.DataFrame'>
Index: 2 entries, Australia to New Zealand
Data columns (total 12 columns):
gdpPercap_1952 2 non-null float64
gdpPercap_1957 2 non-null float64
gdpPercap_1962 2 non-null float64
gdpPercap_1967 2 non-null float64
gdpPercap_1972 2 non-null float64
gdpPercap_1977 2 non-null float64
gdpPercap_1982 2 non-null float64
gdpPercap_1987 2 non-null float64
gdpPercap_1992 2 non-null float64
gdpPercap_1997 2 non-null float64
gdpPercap_2002 2 non-null float64
gdpPercap_2007 2 non-null float64
dtypes: float64(12)
memory usage: 208.0+ bytes
- Questo è un
DataFrame - Due righe denominate
'Australia'e'New Zealand' - Dodici colonne, ciascuna delle quali contiene due valori effettivi
in virgola mobile a 64 bit.
- Parleremo in seguito dei valori nulli, utilizzati per rappresentare le osservazioni mancanti.
- Utilizza 208 byte di memoria.
La variabile DataFrame.columns memorizza informazioni
sulle colonne del dataframe.
- Nota che questo è un dato,non un metodo. (non ha parentesi)
- Come
math.pi. - Quindi non usare
()per cercare di chiamarlo.
- Come
- Si chiama variabile membro, o semplicemente membro.
OUTPUT
Index(['gdpPercap_1952', 'gdpPercap_1957', 'gdpPercap_1962', 'gdpPercap_1967',
'gdpPercap_1972', 'gdpPercap_1977', 'gdpPercap_1982', 'gdpPercap_1987',
'gdpPercap_1992', 'gdpPercap_1997', 'gdpPercap_2002', 'gdpPercap_2007'],
dtype='object')
Usare DataFrame.T per trasporre un dataframe.
- A volte si desidera trattare le colonne come righe e viceversa.
- La trasposizione (scritta
.T) non copia i dati, ma cambia solo la visione della tabella - Come
columns, è una variabile membro.
OUTPUT
country Australia New Zealand
gdpPercap_1952 10039.59564 10556.57566
gdpPercap_1957 10949.64959 12247.39532
gdpPercap_1962 12217.22686 13175.67800
gdpPercap_1967 14526.12465 14463.91893
gdpPercap_1972 16788.62948 16046.03728
gdpPercap_1977 18334.19751 16233.71770
gdpPercap_1982 19477.00928 17632.41040
gdpPercap_1987 21888.88903 19007.19129
gdpPercap_1992 23424.76683 18363.32494
gdpPercap_1997 26997.93657 21050.41377
gdpPercap_2002 30687.75473 23189.80135
gdpPercap_2007 34435.36744 25185.00911
Usare DataFrame.describe() per ottenere statistiche di
sintesi sui dati.
DataFrame.describe() ottiene le statistiche riassuntive
solo delle colonne che hanno dati numerici. Tutte le altre colonne
vengono ignorate, a meno che non si utilizzi l’argomento
include='all'.
OUTPUT
gdpPercap_1952 gdpPercap_1957 gdpPercap_1962 gdpPercap_1967 \
count 2.000000 2.000000 2.000000 2.000000
mean 10298.085650 11598.522455 12696.452430 14495.021790
std 365.560078 917.644806 677.727301 43.986086
min 10039.595640 10949.649590 12217.226860 14463.918930
25% 10168.840645 11274.086022 12456.839645 14479.470360
50% 10298.085650 11598.522455 12696.452430 14495.021790
75% 10427.330655 11922.958888 12936.065215 14510.573220
max 10556.575660 12247.395320 13175.678000 14526.124650
gdpPercap_1972 gdpPercap_1977 gdpPercap_1982 gdpPercap_1987 \
count 2.00000 2.000000 2.000000 2.000000
mean 16417.33338 17283.957605 18554.709840 20448.040160
std 525.09198 1485.263517 1304.328377 2037.668013
min 16046.03728 16233.717700 17632.410400 19007.191290
25% 16231.68533 16758.837652 18093.560120 19727.615725
50% 16417.33338 17283.957605 18554.709840 20448.040160
75% 16602.98143 17809.077557 19015.859560 21168.464595
max 16788.62948 18334.197510 19477.009280 21888.889030
gdpPercap_1992 gdpPercap_1997 gdpPercap_2002 gdpPercap_2007
count 2.000000 2.000000 2.000000 2.000000
mean 20894.045885 24024.175170 26938.778040 29810.188275
std 3578.979883 4205.533703 5301.853680 6540.991104
min 18363.324940 21050.413770 23189.801350 25185.009110
25% 19628.685413 22537.294470 25064.289695 27497.598692
50% 20894.045885 24024.175170 26938.778040 29810.188275
75% 22159.406358 25511.055870 28813.266385 32122.777857
max 23424.766830 26997.936570 30687.754730 34435.367440
- Non particolarmente utile con due soli record, ma molto utile quando ce ne sono migliaia.
Lettura di altri dati
Leggere i dati contenuti in gapminder_gdp_americas.csv
(che dovrebbe trovarsi nella stessa directory di
gapminder_gdp_oceania.csv) in una variabile chiamata
data_americas e visualizzarne le statistiche
riassuntive.
Per leggere un CSV, si usa pd.read_csv e gli si passa il
nome del file 'data/gapminder_gdp_americas.csv'. Passiamo
ancora una volta il nome della colonna 'country' al
parametro index_col per indicizzare per paese. Le
statistiche di riepilogo possono essere visualizzate con il metodo
DataFrame.describe().
Ispezione dei dati
Dopo aver letto i dati relativi alle Americhe, utilizzate
help(data_americas.head) e
help(data_americas.tail) per scoprire cosa fanno
DataFrame.head e DataFrame.tail.
- Quale metodo visualizzerà le prime tre righe di questi dati?
- Quale metodo visualizzerà le ultime tre colonne di questi dati? (Suggerimento: potrebbe essere necessario modificare la visualizzazione dei dati)
- Possiamo controllare le prime cinque righe di
data_americaseseguendodata_americas.head()che ci permette di visualizzare l’inizio del DataFrame. È possibile specificare il numero di righe che si desidera visualizzare specificando il parametronnella chiamata adata_americas.head(). Per visualizzare le prime tre righe, eseguire:
OUTPUT
continent gdpPercap_1952 gdpPercap_1957 gdpPercap_1962 \
country
Argentina Americas 5911.315053 6856.856212 7133.166023
Bolivia Americas 2677.326347 2127.686326 2180.972546
Brazil Americas 2108.944355 2487.365989 3336.585802
gdpPercap_1967 gdpPercap_1972 gdpPercap_1977 gdpPercap_1982 \
country
Argentina 8052.953021 9443.038526 10079.026740 8997.897412
Bolivia 2586.886053 2980.331339 3548.097832 3156.510452
Brazil 3429.864357 4985.711467 6660.118654 7030.835878
gdpPercap_1987 gdpPercap_1992 gdpPercap_1997 gdpPercap_2002 \
country
Argentina 9139.671389 9308.418710 10967.281950 8797.640716
Bolivia 2753.691490 2961.699694 3326.143191 3413.262690
Brazil 7807.095818 6950.283021 7957.980824 8131.212843
gdpPercap_2007
country
Argentina 12779.379640
Bolivia 3822.137084
Brazil 9065.800825
- Per controllare le ultime tre righe di
data_americas, si usa il comandoamericas.tail(n=3), analogo ahead()usato sopra. Tuttavia, in questo caso vogliamo guardare le ultime tre colonne, quindi dobbiamo cambiare la nostra vista e usaretail(). Per farlo, creiamo un nuovo DataFrame in cui le righe e le colonne sono invertite:
Possiamo quindi visualizzare le ultime tre colonne di
americas visualizzando le ultime tre righe di
americas_flipped:
OUTPUT
country Argentina Bolivia Brazil Canada Chile Colombia \
gdpPercap_1997 10967.3 3326.14 7957.98 28954.9 10118.1 6117.36
gdpPercap_2002 8797.64 3413.26 8131.21 33329 10778.8 5755.26
gdpPercap_2007 12779.4 3822.14 9065.8 36319.2 13171.6 7006.58
country Costa Rica Cuba Dominican Republic Ecuador ... \
gdpPercap_1997 6677.05 5431.99 3614.1 7429.46 ...
gdpPercap_2002 7723.45 6340.65 4563.81 5773.04 ...
gdpPercap_2007 9645.06 8948.1 6025.37 6873.26 ...
country Mexico Nicaragua Panama Paraguay Peru Puerto Rico \
gdpPercap_1997 9767.3 2253.02 7113.69 4247.4 5838.35 16999.4
gdpPercap_2002 10742.4 2474.55 7356.03 3783.67 5909.02 18855.6
gdpPercap_2007 11977.6 2749.32 9809.19 4172.84 7408.91 19328.7
country Trinidad and Tobago United States Uruguay Venezuela
gdpPercap_1997 8792.57 35767.4 9230.24 10165.5
gdpPercap_2002 11460.6 39097.1 7727 8605.05
gdpPercap_2007 18008.5 42951.7 10611.5 11415.8
Questo mostra i dati che desideriamo, ma potremmo preferire la visualizzazione di tre colonne invece che di tre righe, per cui possiamo invertirla:
Nota: avremmo potuto eseguire quanto sopra in una sola riga di codice “concatenando” i comandi:
Lettura dei file in altre directory
I dati per il vostro progetto attuale sono memorizzati in un file
chiamato microbes.csv, che si trova in una cartella
chiamata field_data. L’analisi viene eseguita in un blocco
note chiamato analysis.ipynb in una cartella sorella
chiamata thesis:
OUTPUT
your_home_directory
+-- field_data/
| +-- microbes.csv
+-- thesis/
+-- analysis.ipynb
Quale/i valore/i si deve passare a read_csv per leggere
microbes.csv in analysis.ipynb?
Dobbiamo specificare il percorso del file di interesse nella chiamata
a pd.read_csv. Dobbiamo prima ‘saltare’ dalla cartella
thesis usando ‘../’ e poi nella cartella
field_data usando ‘field_data/’. Quindi si può specificare
il nome del file microbes.csv. Il risultato è il
seguente:
Scrittura dei dati
Oltre alla funzione read_csv per leggere i dati da un
file, Pandas fornisce una funzione to_csv per scrivere i
dataframe sui file. Applicando quanto appreso sulla lettura dei file,
scrivete uno dei vostri dataframe in un file
chiamatoprocessed.csv. È possibile utilizzare
help per ottenere informazioni su come utilizzare
to_csv.
Per scrivere il DataFrame data_americas in un file
chiamato processed.csv, eseguire il seguente comando:
Per ottenere aiuto su read_csv o to_csv, si
può eseguire, ad esempio:
Si noti che help(to_csv) o help(pd.to_csv)
generano un errore! Ciò è dovuto al fatto che to_csv non è
una funzione globale di Pandas, ma una funzione membro di DataFrames.
Ciò significa che può essere chiamata solo su un’istanza di un
DataFrame, ad esempio data_americas.to_csv o
data_oceania.to_csv
- Utilizzare la libreria Pandas per ottenere statistiche di base da tabelle.
- Utilizzare
index_colper specificare che i valori di una colonna devono essere utilizzati come intestazioni di riga. - Usare
DataFrame.infoper saperne di più su un dataframe. - La variabile
DataFrame.columnsmemorizza informazioni sulle colonne del dataframe. - Utilizzare
DataFrame.Tper trasporre un dataframe. - Utilizzare
DataFrame.describeper ottenere statistiche di sintesi sui dati.