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()edtypesper verificare struttura e tipi. - Indica l’encoding: evita problemi con caratteri accentati e simboli internazionali.
- Non salvare l’indice per errore: usa
index=Falsequando 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
chunksizeper 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.
