Importare ed esportare dati con Pandas: CSV, JSON ed Excel

by theArchitect
SHARE
Importare ed esportare dati con Pandas: CSV, JSON ed Excel
© Guida-HTML5.it

Introduzione

Una delle attività più comuni nell’analisi dei dati consiste nel leggere informazioni salvate in file esterni, trasformarle in una struttura facilmente manipolabile e infine salvare i risultati. La libreria Pandas offre funzioni semplici e potenti per lavorare con diversi formati, tra cui CSV, JSON ed Excel.

In questo tutorial costruiremo un piccolo flusso di lavoro completo: leggeremo un file CSV contenente dati sulle vendite, controlleremo i tipi delle colonne, esporteremo il risultato in formato Excel e creeremo anche un file JSON. L’obiettivo non è soltanto conoscere i nomi delle funzioni, ma imparare a gestire correttamente percorsi, codifiche, intestazioni e formati dei dati.

Per installare Pandas, è possibile usare:

pip install pandas openpyxl

Il pacchetto openpyxl è utile perché Pandas lo utilizza normalmente per leggere e scrivere file Excel in formato .xlsx.

Codice completo

from pathlib import Path
import pandas as pd

# Cartella in cui si trovano i file di input e di output
cartella_dati = Path("dati")

# Creazione della cartella se non esiste già
cartella_dati.mkdir(exist_ok=True)

# Percorso del file CSV di origine
percorso_csv = cartella_dati / "vendite.csv"

# Creazione di un CSV di esempio per rendere il programma autonomo
contenuto_csv = """data,prodotto,quantita,prezzo_unitario
2026-01-10,Tastiera,3,35.50
2026-01-11,Mouse,5,18.90
2026-01-12,Monitor,2,249.99
2026-01-13,Tastiera,1,35.50
"""

percorso_csv.write_text(contenuto_csv, encoding="utf-8")

# Lettura del CSV
vendite = pd.read_csv(
    percorso_csv,
    encoding="utf-8"
)

# Conversione della colonna data in un vero tipo temporale
vendite["data"] = pd.to_datetime(vendite["data"])

# Creazione di una nuova colonna calcolata
vendite["totale"] = vendite["quantita"] * vendite["prezzo_unitario"]

# Visualizzazione delle informazioni principali
print("Prime righe:")
print(vendite.head())

print("nTipi delle colonne:")
print(vendite.dtypes)

# Esportazione in Excel
percorso_excel = cartella_dati / "vendite_elaborate.xlsx"

vendite.to_excel(
    percorso_excel,
    index=False,
    sheet_name="Vendite"
)

# Esportazione in JSON
percorso_json = cartella_dati / "vendite_elaborate.json"

vendite.to_json(
    percorso_json,
    orient="records",
    date_format="iso",
    indent=2,
    force_ascii=False
)

# Rilettura del file Excel per verificare il risultato
vendite_da_excel = pd.read_excel(
    percorso_excel,
    sheet_name="Vendite"
)

print("nDati riletti da Excel:")
print(vendite_da_excel)

Spiegazione

Lettura di un file CSV

La funzione principale per leggere un file CSV è pd.read_csv(). Essa restituisce un DataFrame, cioè una tabella composta da righe e colonne.

vendite = pd.read_csv("vendite.csv")

Il parametro encoding indica la codifica dei caratteri. Usare esplicitamente utf-8 aiuta a gestire correttamente lettere accentate e simboli. In alcuni file prodotti da software italiani può essere necessario usare latin-1 o cp1252.

Non tutti i CSV usano la virgola come separatore. Se il file utilizza il punto e virgola, è necessario indicarlo:

df = pd.read_csv("vendite.csv", sep=";")

Quando la prima riga non contiene i nomi delle colonne, si può usare:

df = pd.read_csv(
    "dati_senza_intestazione.csv",
    header=None,
    names=["data", "prodotto", "quantita"]
)

Conversione dei tipi

Una colonna letta da un file può avere un tipo non adatto alle operazioni successive. Nel nostro esempio, la colonna data viene convertita con pd.to_datetime(). In questo modo possiamo effettuare confronti temporali e usare le funzionalità dedicate alle date.

Le quantità e i prezzi, invece, devono essere numerici. Se un file contiene valori non validi, è possibile usare:

vendite["prezzo_unitario"] = pd.to_numeric(
    vendite["prezzo_unitario"],
    errors="coerce"
)

Con errors="coerce", i valori non convertibili diventano NaN, invece di interrompere l’esecuzione del programma.

Esportazione in Excel

Il metodo to_excel() salva un DataFrame in un foglio Excel. Il parametro index=False evita di aggiungere al file l’indice numerico di Pandas come colonna separata.

df.to_excel(
    "risultato.xlsx",
    index=False,
    sheet_name="Risultati"
)

È anche possibile esportare più DataFrame nello stesso file usando ExcelWriter:

with pd.ExcelWriter("report.xlsx") as writer:
    vendite.to_excel(writer, sheet_name="Vendite", index=False)
    vendite.describe().to_excel(writer, sheet_name="Statistiche")

Esportazione in JSON

Il metodo to_json() permette di creare file adatti allo scambio di dati con applicazioni web e API. L’opzione orient="records" produce una lista di oggetti, uno per ogni riga:

[
  {
    "data": "2026-01-10T00:00:00.000",
    "prodotto": "Tastiera",
    "quantita": 3,
    "prezzo_unitario": 35.5,
    "totale": 106.5
  }
]

Best practice

  • Usa pathlib: costruire i percorsi con Path è più affidabile rispetto alla concatenazione manuale di stringhe.
  • Controlla sempre il risultato: dopo la lettura, usa head(), info() e dtypes per verificare struttura e tipi.
  • Indica l’encoding: evita problemi con caratteri accentati e simboli internazionali.
  • Non salvare l’indice per errore: usa index=False quando l’indice non rappresenta un dato reale.
  • Specifica i formati delle date: convertire subito le date rende più sicure le elaborazioni successive.
  • Gestisci file di grandi dimensioni: con CSV molto voluminosi puoi usare il parametro chunksize per leggere i dati a blocchi.
  • Evita di sovrascrivere gli originali: salva i risultati in file o cartelle separate, così puoi sempre recuperare i dati di partenza.

Riepilogo

Con Pandas è possibile costruire rapidamente una pipeline di importazione ed esportazione dei dati. pd.read_csv() legge file CSV, pd.read_excel() importa cartelle di lavoro Excel e pd.read_json() gestisce dati JSON. Per salvare i risultati si usano rispettivamente to_csv(), to_excel() e to_json().

Un flusso robusto non si limita alla lettura del file: controlla i tipi, converte le colonne nel formato corretto, calcola eventuali nuovi valori e verifica che il file esportato possa essere riletto senza errori.

Approfondisci con risorse ufficiali

SHARE