Importare un CSV in Python (con codice)

In questo breve tutorial vediamo come importare un CSV in Python usando l’ambiente di sviluppo Jupyter Notebook.

CSV in Python

Imparare ad importare un dataset in CSV in Python è una delle operazioni più importanti per ogni data scientist e Machine Learning lover. Sebbene Python permetta anche la creazione da zero di un dataset (o dataframe, a seconda delle librerie che usiamo), quasi sempre si ha a che fare con dataset esistenti. Il formato più utilizzato è il CSV, quello che utilizza anche Kaggle (clicca qui per maggiori informazioni), ma si possono trovare anche molti altri formati: xlsx, xls, doc, rft, tab ecc ecc.

In questo tutorial ci soffermeremo su come importare un CSV in Python utilizzando Jupyter Notebook. L’articolo è così suddiviso:

  • Introduzione: Python con Jupyter Notebook
  • Importiamo un CSV nel nostro notebook
    • Caso 1 – Dataset CSV con intestazione delle colonne
    • Caso 2 – Dataset CSV senza intestazione delle colonne
    • CSV con separatori diversi
  • Conclusioni

I dati che utilizzeremo saranno i seguenti, salvati in un csv con il nome di film_super_epici.csv:

Film, Anno, Regista
C’era una volta in America, 1984, Sergio Leone
Bastardi senza gloria, 2009, Quentin Tarantino
Oldboy, 2003, Park Chan-wook
Quella villa accanto al cimitero, 1981, Lucio Fulci

Per fare delle prove, copiali e incollali in un Documento di Testo e salvali con l’estensione .csv, così potrai runnare il codice che troverai in questo articolo. Per il Caso 1 lascia pure il file così com’è, per il Caso 2 cancella la prima riga, mentre per il paragrafo CSV con separatori diversi sostituisci le virgole con il punto e virgola (;). NB: per fare questa operazione puoi andare in Modifica –> “Sostituisci” –> “Sostituisci tutto”.

Introduzione: Python con Jupyter Notebook

Prima di andare a vedere il codice, cerchiamo di capire quale ambiente useremo per le nostre operazioni di importazione. Uno degli strumenti più utili in questo ambito è il notebook Jupyter. Il notebook Jupyter è un ambiente di sviluppo interattivo web-based che permette di scrivere codice in Python e visualizzarne immediatamente il risultato. Ogni riga di codice è inserita in una cella e runnando la cella riceviamo un output (qualora il nostro comando lo preveda). Può essere utilizzato sia direttamente online ( https://jupyter.org/ ) sia tramite la distribuzione Anaconda.

Per poter utilizzare dei dataset o dei qualunque documenti con Jupyter bisogna impostare la directory. Sembra una cosa difficile ma non lo è: noi diciamo a Jupyter di caricare/leggere/scrivere un certo file, ma dobbiamo dirgli dove prenderlo o dove salvarlo. Ogni volta che apriamo Jupyter ci verrà chiesto di selezionare una cartella dove salvare il nostro notebook, dove recuperare file o dove eventualmente compiere delle operazioni. La cartella che selezioneremo sarà la directory.

Importiamo un CSV nel nostro notebook

L’operazione da compiere per importare un CSV è estremamente semplice, basteranno un paio di righe di codice. Prima però dobbiamo vedere più da vicino il nostro dataset per poterlo importare. Dobbiamo chiederci se nel file CSV è presente l’header (intestazione), ovvero una riga (solitamente la prima) in cui sono scritti i nomi delle colonne. Se c’è questa riga, quindi ci sono i nomi delle colonne, puoi leggere il Caso 1 – Dataset CSV con intestazione delle colonne. In caso contrario, se questi nomi non sono presenti, dobbiamo importarli manualmente. Vai quindi al Caso 2 – Dataset CSV senza intestazione delle colonne.

In questo tutorial, come abbiamo anticipato, useremo un dataset dal nome: film_super_epici.csv.

La prima operazione da fare in ogni modo, prima di scrivere il codice per importare il CSV, è importare la libreria pandas, che ci servirà per leggere i file (clicca qui per il nostro articolo sulle librerie di Python per il Machine Learning).

import pandas as pd

Caso 1 – Dataset CSV con intestazione delle colonne

Una volta importato pandas, possiamo dare un nome al dataset e importare il file.

data = pd.read_csv("film_super_epici.csv ", header = 0)

L’opzione header=0 imposta che l’intestazione, il nome delle colonne, venga presa dalla prima riga. NB: Non lasciarti ingannare da quello 0, in Python infatti il conteggio inizia da 0 non da 1.

Per vedere se la nostra importazione è andata a buon fine, basterà stampare le prime righe del dataset con il seguente comando:

data.head()

E come per magia appariranno i nostri dati:

Cosa fare se invece nel csv non sono presenti i nomi delle colonne nella prima riga?

Caso 2 – Dataset CSV senza intestazione delle colonne

Nel caso in cui il nostro CSV non contenga il nome delle colonne nella prima riga, dobbiamo aggiungere manualmente il nome delle colonne. Anche questa è una procedura molto semplice.

Una volta importato pandas, scriviamo il nome del dataset, selezioniamo il file da prendere e aggiungiamo l’opzione names = [*nomi delle colonne] al posto di header = 0. Mi raccomando: bisogna attenti a scrivere i nomi delle colonne mantenendo l’ordine dei dati nel CSV.

data = pd.read_csv("film_super_epici_senza_header.csv", names=["Film", "Anno", "Regista"])

Facendo poi data.head() il risultato sarà sempre lo stesso del Caso 1.

CSV con separatori diversi

Fin qui abbiamo dato per scontato che il separatore dei dati fosse la virgola (“,”), infatti nel file originale abbiamo visto che i dati compaiono in questo modo:

Film, Anno, Regista
C’era una volta in America, 1984, Sergio Leone
Bastardi senza gloria, 2009, Quentin Tarantino
Oldboy, 2003, Park Chan-wook
Quella villa accanto al cimitero, 1981, Lucio Fulci

Ma come comportarci nel caso in cui il separatore non fosse la virgola ma per esempio il punto e virgola o il cancelletto?

L’operazione è, ancora una volta, molto semplice. Basterà infatti specificare il separatore con l’opzione sep="il nostro separatore".

Questi saranno i nostri nuovi dati:

Film; Anno; Regista
C’era una volta in America; 1984; Sergio Leone
Bastardi senza gloria; 2009; Quentin Tarantino
Oldboy; 2003; Park Chan-wook
Quella villa accanto al cimitero; 1981; Lucio Fulci

Questo quindi il nuovo codice:

data = pd.read_csv("film_super_epici_sep.csv", header=0, sep=";")

Se il separatore fosse stato un cancelletto per esempio, sarebbe bastato inserire sep="#" e il risultato sarebbe stato lo stesso.

Conclusioni

In questo tutorial abbiamo visto come importare un CSV in Python attraverso Jupyter Notebook.

Abbiamo visto che esistono diversi casi che possiamo incontrare: nel Caso 1 vediamo come importare dei dati in cui è presente il nome delle colonne, nel Caso 2 invece inseriamo queste colonne manualmente. Infine abbiamo visto come gestire la possibilità di CSV che utilizzano non la virgola come separatore standard, ma altri caratteri.

Spero che tu abbia trovato questo tutorial utile, se così fosse, aiutaci a diffonderlo!

Davide Nardini