Importare dati da un file Excel (.xlsx) con pandas

Questo argomento è un approfondimento di una micro-lezione proposta da analiticas, la newsletter di micro-lezioni per imparare ad analizzare i dati con Python.

Utilizzare Python e la libreria pandas per analizzare dati prevede un banale requisito: i dati! Da dove li prendiamo? Dove li importiamo? Cosa ne facciamo?

I dati che andremo ad importare nel nostro script andranno a costituire un dataframe (spesso abbreviato come df) che ha grosso modo questo aspetto:

Immagine 1

Immagine 1

In questo breve articolo esamineremo i passaggi necessari per importare un file Excel in pandas e le relative possibilità di personalizzazione.

Importare il file

I file .xlsx sono file nel formato standard di Microsoft Excel. Pandas dispone di un comando adatto ad importare direttamente i dati contenuti in questo tipo di file.

Prima di tutto, procediamo ad importare la stessa libreria pandas all’inizio dello script che stiamo scrivendo in Python. Per brevità, decideremo di importare pandas usando l’alias pd.

import pandas as pd

Chiaramente, qualora non avessimo installato pandas sul nostro computer, eseguendo questa riga di codice si andrà incontro ad un errore. Per il momento, ipotizziamo di aver già eseguito quanto spiegato qui, e procediamo. E’ arrivato il momento di importare il nostro file Excel.

dati = pd.read_excel('file.xlsx')

Importante: se usi una versione di pandas inferiore alla 1.2 dovrai specificare l'argomento engine per leggere un file .xlsx. Il pacchetto openpyxl dovrà essere scaricato e installato separatamente. In alternativa, puoi aggiornare pandas alla versione 1.2 o superiore. Ecco come leggere un file .xlsx con una versione di pandas inferiore alle 1.2:

dati = pd.read_excel('file.xlsx', engine='openpyxl')

In questo caso stiamo riproducendo una situazione ideale: il file da importare si trova nella stessa cartella dove abbiamo salvato il nostro script. Se questo non è il caso, dobbiamo specificare il path del file:

dati = pd.read_excel(r'C:\User\path\file.xlsx')

Questo è tutto quello ciò che occorre per importare i dati da un file Excel in un programma Python, usando la libreria pandas. A questo punto, non volendoci limitare ad un spiegazione troppo basilare, esaminiamo gli argomenti supplementari di read_excel().

Specificare il foglio del file Excel : sheet_name

Il comando read_excel() legge sempre i dati che si trovano sul primo foglio del file Excel. Se vogliamo personalizzare questo aspetto, dobbiamo specificare il parametro sheet_name.

Inoltre, è possibile selezionare il foglio sia in base al suo nome che in base alla sua posizione all’interno del file Excel.

# selezionare il foglio in base al suo nome
dati = pd.read_excel(r'C:\User\path\file.xlsx', sheet_name="Nomi")
dati = pd.read_excel(r'C:\User\path\file.xlsx', sheet_name="Cose")

# selezionare il foglio in base alla sua posizione
dati = pd.read_excel(r'C:\User\path\file.xlsx', sheet_name=0)
dati = pd.read_excel(r'C:\User\path\file.xlsx', sheet_name=1)

Nel primo gruppo di esempi, il nostro codice costruirà un dataframe corrispondente al foglio chiamato “Nomi” all’interno del file Excel. Lo stesso accade per il foglio chiamato “Cose” nel secondo esempio.

Nel secondo gruppo di esempi, costruiremo un dataframe corrispondente al primo foglio del nostro file Excel, a prescindere dal suo nome. Lo stesso accade con il secondo foglio nell’esempio successivo.

Nota bene: nel linguaggio di programmazione Python si conta a partire dal numero zero. Di conseguenza quando attribuiamo il valore 0 all’argomento sheet_name indichiamo il primo foglio.

Quando l’argomento sheet_name non viene specificato, il suo valore di default corrisponde a zero. Questo vuol dire che il comando leggerà il primo foglio del file Excel, qualunque esso sia.

Specificare la riga di intestazione: header

A volte può capitare di voler specificare quale riga del foglio Excel andrà a costituire l’intestazione del nostro dataframe. In questo caso, non ci resta che includere l’argomento header:

dati = pd.read_excel(r'C:\User\path\file.xlsx', sheet_name=1, header=0)

In questo caso stiamo specificando che la prima riga del foglio Excel costituisce l’intestazione del dataframe. L’argomento header ha “0” come valore di default, quindi in questo caso avremmo potuto ometterlo. Ipotizziamo allora che vogliamo prendere la seconda riga del foglio Excel come intestazione. Il nostro codice avrà questo aspetto:

dati = pd.read_excel(r'C:\User\path\file.xlsx', sheet_name=1, header=1)

Specificare la colonna che sarà l’indice del dataframe: index_col

Immaginiamo di importare da un file Excel una lista delle dieci aziende con la valutazione più alta al mondo. Il file è così:

Immagine 2

Eseguendo il codice visto in precedenza e osservando il dataframe creato, avremo questo:

Immagine 3

Pandas aggiunge automaticamente una colonna che funge da indice al nostro dataframe. Tuttavia, in questo caso, ipotizziamo di voler che sia la colonna “Posizione” ad essere l’indice del dataframe. Per attribuirle questa funzione, dobbiamo usare l’argomento index_col.

#attribuire l'indice partendo dalla posizione della colonna
dati = pd.read_excel(r'C:\User\path\file.xlsx', index_col=0)

#attribuire l'indice partendo dal nome della colonna
dati = pd.read_excel(r'C:\User\path\file.xlsx', index_col="Posizione")

Entrambe queste linee di codice, creeranno il dataframe seguente:

Immagine 4

Il valore di default dell’argomento index_col è “None” (“nessuno” in inglese"). Ecco perché pandas ne crea una supplementare affinché il dataframe sia dotato di un indice.

I vantaggi prodotti dal cambiamento dell’indice in alcune situazioni sono spiegati in questo articolo.

Cambiare il nome alle colonne: names

A volte può capitare di voler cambiare il nome alle colonne del dataframe. Questa è un’operazione che può essere eseguita sin dal momento dell’importazione dei dati. Basta solo specificare l’argomento names.

dati = pd.read_excel(r'\User\path\file.xlsx', names=['uno','due','tre'])

Ed ecco il risultato: i nomi delle colonne sono stati cambiati.

Immagine 5

Escludere delle righe all’inizio: skiprows

A volte capita che i il nostro file .xlsx contenga delle righe che non fanno parte del nostro set di dati subito sopra la tabella che vogliamo importare. In questo caso, l’argomento skiprows ci permetterà di non importarle.

dati = pd.read_excel(r'\User\path\file.xlsx', skiprows=4)

Eseguendo questa linea di codice, importeremo i dati dal nostro file Excel escludendo le prime 4 righe del foglio di calcolo.

Il valore di default dell’argomento skiprows é uguale a zero. Questo vuol dire che, a meno che non gliene attribuiamo un altro, nessuna riga verrà esclusa.

Escludere delle righe alla fine: skipfooter

Analogamente all’esempio precedente, a volte può capitare di voler escludere alcune righe alla fine del nostro set di dati sul file Excel (ad esempio, se vi sono delle note). A questo scopo, dobbiamo specificare un valore per l’argomento skipfooter.

dati = pd.read_excel(r'\User\path\file.xlsx', skipfooter=2)

In questo modo importeremo i nostri dati escludendo le ultime due righe del set di dati.

Il valore di default dell’argomento skipfooter è uguale a zero. Se non gli attribuiamo un valore differente, nessuna riga verrà esclusa dall’importazione.

Convertire numeri interi in decimali: convert_float

L’argomento convert_float è un po’ più di nicchia rispetto a quelli esaminati fin qui e serve per convertire i numeri interi in decimali, mentre importiamo dei dati da un file Excel. Questo può avvenire perché tutti i numeri, indipendentemente dal fatto che abbiano valori o meno dopo la virgola, sono classificati come float da Excel (float è il tipo di dati corrispondente ai numeri con la virgola). Quindi il numero 2 corrisponde in realtà a 2,0.

Quando importiamo dei dati tramite la libreria pandas, Python converte automaticamente tutti i numeri senza valori dopo la virgola in integers. Per far sì che questo non avvenga, e si conservi la tipologia float, dobbiamo cambiare il valore di default dell’argomento convert_float.

dati = pd.read_excel(r'\User\path\file.xlsx',sheet_name=0,
                    convert_float=False)

In questo caso, il dataframe osservato nell’immagine 3 di questo articolo verrà letto così:

Immagine 6

Possiamo infatti osservare che tutti i numeri del dataframe sono stati inportati come valori di tipo float.

Conclusione

In questo articolo abbiamo visto come importare dati da un file Excel (in formato .xlsx) e sette argomenti che ne possono snellire la lavorazione.

Inoltre, se ti interessa scoprire come importare dati da un file .csv, questo è l’articolo che fa per te.

Se invece devi importare dei dati salvati su un vecchio formato di file Excel (.xls), guarda qui come fare.

Se vuoi ricevere delle micro-lezioni di Python per l’analisi dei dati via email, dai un’occhiata a analiticas, o iscriviti qui sotto