Scrittura dei DataFrame su file
Esporti un DataFrame ripulito in CSV ed Excel con to_csv e to_excel, controllando indice e formato dei numeri in virgola mobile.
Scrittura dei DataFrame su file è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Perché l'esportazione è importante
L'analisi dei dati raramente termina all'interno di Python. È necessario condividere dataset ripuliti con gli stakeholder, fornire i risultati ad altri strumenti o archiviare i dati elaborati per garantire la riproducibilità. Pandas mette a disposizione to_csv(), to_excel(), to_json() e to_parquet(), che rispecchiano le funzioni di lettura e accettano la maggior parte degli stessi parametri di configurazione.
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
df.to_csv('results.csv')
df.to_excel('results.xlsx')
df.to_json('results.json', orient='records')to_csv(): il problema dell'indice
Per impostazione predefinita, to_csv() scrive l'indice delle righe come prima colonna, creando una colonna unnamed: 0 quando il file viene riletto. Passi index=False per omettere l'indice: è quasi sempre la scelta corretta, a meno che l'indice non rappresenti dati significativi, come le date. Specifichi sempre index=False, salvo che abbia un motivo preciso per includere l'indice.
import pandas as pd
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
# Include index (default -- creates 'Unnamed: 0' when re-read)
df.to_csv('with_index.csv')
# Exclude index (recommended)
df.to_csv('clean.csv', index=False)Controllare delimitatore e codifica
Passi sep= per scrivere un file separato da tabulazioni o da punto e virgola. Utilizzi encoding= per specificare UTF-8 o un altro set di caratteri: è essenziale quando i valori delle colonne contengono caratteri non ASCII, come lettere accentate o caratteri cinesi. encoding='utf-8-sig' aggiunge un BOM (indicatore dell'ordine dei byte) per garantire la compatibilità con Excel su Windows.
import pandas as pd
df = pd.DataFrame({'name': ['Müller', 'Tanaka'], 'val': [1, 2]})
# Tab-separated, UTF-8
df.to_csv('output.tsv', sep='\t', encoding='utf-8', index=False)
# Excel-compatible UTF-8 with BOM
df.to_csv('for_excel.csv', encoding='utf-8-sig', index=False)Controllare la formattazione dei float
Per impostazione predefinita, Pandas scrive i float con la precisione completa. Utilizzi float_format='%.2f' per limitarli a 2 cifre decimali, un aspetto importante per i dati finanziari, nei quali cifre decimali aggiuntive risultano errate agli occhi di chi legge. Passi na_rep='NULL' o na_rep='' per controllare come vengono scritti i valori NaN nel file di output.
import pandas as pd
import numpy as np
df = pd.DataFrame({'price': [9.99, np.nan, 14.123456],
'qty': [1, 2, 3]})
df.to_csv('prices.csv',
index=False,
float_format='%.2f',
na_rep='N/A')to_excel(): scrivere un foglio
df.to_excel('file.xlsx', sheet_name='Data', index=False) scrive il DataFrame in una cartella di lavoro Excel. Come per to_csv(), imposti index=False salvo che l'indice sia significativo. I parametri startrow= e startcol= consentono di posizionare la tabella all'interno del foglio, utile per aggiungere una riga del titolo sopra i dati.
import pandas as pd
df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
df.to_excel('report.xlsx',
sheet_name='Sales',
index=False,
startrow=1) # leave row 0 for a titleScrivere più fogli con ExcelWriter
Per scrivere più DataFrame in fogli diversi della stessa cartella di lavoro, utilizzi pd.ExcelWriter come context manager. Chiami df.to_excel(writer, sheet_name='Name') per ogni DataFrame all'interno del blocco with. La cartella di lavoro viene completata e salvata all'uscita dal contesto. In questo modo evita di creare più file separati per tabelle correlate.
import pandas as pd
df1 = pd.DataFrame({'a': [1, 2]})
df2 = pd.DataFrame({'b': [3, 4]})
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)to_json(): esportare JSON
df.to_json() serializza un DataFrame in JSON. Il parametro orient= rispecchia quello di read_json: utilizzi 'records' per un elenco di dizionari riga (la scelta più interoperabile), 'columns' per un dizionario di array di colonne oppure 'index' per un dizionario indicizzato per etichetta di riga. Passi indent=2 per ottenere una formattazione leggibile.
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
print(df.to_json(orient='records', indent=2))
# [
# {"name": "A", "score": 90},
# {"name": "B", "score": 75}
# ]Aggiungere dati a un file esistente
Per aggiungere righe a un CSV esistente senza sovrascriverlo, apra il file in modalità append utilizzando mode='a' e imposti header=False per evitare di duplicare la riga d'intestazione. Per Excel, utilizzi ExcelWriter con mode='a'. Per pipeline di streaming di grandi dimensioni, aggiunga i dati a blocchi e scriva l'intestazione solo nel primo blocco.
import pandas as pd
df_new = pd.DataFrame({'a': [5, 6], 'b': [7, 8]})
# Append to existing file, skip writing header
df_new.to_csv('existing.csv',
mode='a',
header=False,
index=False)Selezionare le colonne prima dell'esportazione
Prima di esportare, è buona pratica selezionare solo le colonne necessarie al destinatario e ordinare le righe in un ordine logico. In questo modo il file di output è più pulito e si evita di divulgare accidentalmente colonne interne come ID interni, feature codificate o flag di debug. Utilizzi la selezione tramite parentesi quadre e sort_values() nella stessa espressione della pipeline prima della scrittura.
import pandas as pd
df = pd.DataFrame({'id': [3,1,2],
'name': ['C','A','B'],
'_internal': [9,7,8]})
(df[['id', 'name']]
.sort_values('id')
.to_csv('export.csv', index=False))Verificare il file scritto
Dopo la scrittura, rilegga sempre il file e verifichi: controlli shape, i nomi delle colonne e alcuni valori campione. Per le pipeline CI, confronti i checksum. Per le esportazioni finanziarie critiche, verifichi con un'asserzione che i totali aggregati coincidano. In questo modo è possibile individuare problemi di codifica, perdita di precisione dei float e problemi dell'indice prima che il file raggiunga il sistema che lo utilizzerà.
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df.to_csv('/tmp/check.csv', index=False)
df_check = pd.read_csv('/tmp/check.csv')
assert df_check.shape == df.shape, 'Row/column count mismatch'
assert list(df_check.columns) == list(df.columns)
print('Export verified OK')Parquet: un'alternativa migliore per i dati
Per grandi dataset analitici, consideri il formato Parquet anziché CSV. Parquet memorizza i dati in formato colonnare, supporta la compressione, conserva esattamente i dtypes e legge i dati 10-100 volte più velocemente per le query analitiche. Scriva con df.to_parquet('data.parquet') e legga con pd.read_parquet('data.parquet'). È necessario installare pyarrow o fastparquet.
import pandas as pd
df = pd.DataFrame({'a': range(1000000), 'b': range(1000000)})
df.to_parquet('data.parquet', index=False)
df2 = pd.read_parquet('data.parquet')
print(df2.dtypes) # dtypes preserved exactlyVerifica rapida
Verifichi la comprensione della scrittura dei DataFrame nei file illustrata in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: to_csv() e to_excel() esportano i DataFrame ed entrambi includono l'indice per impostazione predefinita — imposti sempre index=False per ottenere un output pulito, ExcelWriter consente di scrivere più DataFrame in fogli separati della stessa cartella di lavoro e Parquet è un'alternativa più veloce e più efficiente in termini di spazio rispetto a CSV per grandi dataset analitici. Prossimamente caricheremo file CSV remoti dagli URL e analizzeremo stringhe CSV in memoria con io.StringIO.
Domande Frequenti
La lezione «Scrittura dei DataFrame su file» è gratuita?
Sì — il testo completo di «Scrittura dei DataFrame su file» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Cosa imparerò in «Scrittura dei DataFrame su file»?
Esporti un DataFrame ripulito in CSV ed Excel con to_csv e to_excel, controllando indice e formato dei numeri in virgola mobile. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?
Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Scrittura dei DataFrame su file»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?
Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Lettura di file CSV
- Lettura di file Excel e JSON
- Scrittura dei DataFrame su file
- Lettura da URL e StringIO