HOWTO · Pandas

Pandas Aggiungi a CSV

Questo tutorial mostra come aggiungere dati a un file CSV esistente utilizzando to_csv() in modalità di aggiunta

In questa pagina

Usa Pandas to_csv() con mode="a" per aggiungere le righe di un DataFrame dopo quelle già presenti in un file CSV. La modalità di aggiunta conserva il contenuto esistente. Imposta header=False se il file contiene già un’intestazione e index=False se l’indice del DataFrame non deve diventare una colonna CSV aggiuntiva.

Aggiungere un DataFrame a un file CSV esistente

Questo esempio crea un CSV iniziale e vi aggiunge un secondo DataFrame. Nel tuo codice, usa il percorso del file CSV che vuoi aggiornare. Mantieni le colonne aggiunte nello stesso ordine di quelle del CSV esistente: i file CSV non memorizzano uno schema che riordini automaticamente i valori in base ai nomi delle colonne.

Esegui questo esempio. Le intestazioni CSV name e score mostrate dal codice restano in inglese:

from pathlib import Path
from tempfile import TemporaryDirectory

import pandas as pd

with TemporaryDirectory() as directory:
    path = Path(directory) / "records.csv"
    original = pd.DataFrame({"name": ["Ava"], "score": [8]})
    added = pd.DataFrame({"name": ["Noah"], "score": [9]})

    original.to_csv(path, index=False)
    added.to_csv(path, mode="a", header=False, index=False)
    print(path.read_text(), end="")

La prima scrittura crea il file e la relativa intestazione. La seconda usa mode="a" per aggiungere una riga alla fine, con header=False per non ripetere i nomi delle colonne e index=False per evitare che Pandas aggiunga l’indice della riga. Il file finale contiene la riga originale seguita da quella aggiunta. Se vuoi includere l’indice del DataFrame come colonna, ometti index=False e tieni conto di questa colonna aggiuntiva quando leggi il CSV.

Scrivere l’intestazione solo quando il file CSV è vuoto

Se il file di destinazione potrebbe essere vuoto o non esistere ancora, aprilo in modalità di aggiunta e controlla la posizione corrente nel file. Aprire un percorso inesistente con mode="a" crea il file. La chiamata tell() restituisce la posizione corrente; subito dopo l’apertura in modalità di aggiunta, una posizione pari a 0 indica che il file è vuoto. Scrivi l’intestazione solo in questo caso.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

from pathlib import Path
from tempfile import TemporaryDirectory

import pandas as pd

with TemporaryDirectory() as directory:
    path = Path(directory) / "records.csv"
    rows = pd.DataFrame({"name": ["Mia"], "score": [7]})

    with path.open("a", encoding="utf-8", newline="") as csv_file:
        write_header = csv_file.tell() == 0
        rows.to_csv(csv_file, header=write_header, index=False)

Questo approccio funziona sia con un nuovo file sia con un CSV esistente: un file appena creato o vuoto riceve i nomi delle colonne, mentre un file che contiene già dati riceve solo la nuova riga. Usa lo stesso ordine delle colonne e campi compatibili ogni volta che aggiungi dati. Se più processi del tuo programma possono aggiornare contemporaneamente lo stesso file, coordina le scritture affinché il controllo dell’intestazione e la scrittura della riga non si alternino con le operazioni di un altro processo.

Verificare le righe aggiunte ed evitare gli errori più comuni

Dopo la scrittura, leggi il CSV quando vuoi verificarne il contenuto. Nel primo esempio, il file ha un’intestazione seguita dai record originale e aggiunto. L’istruzione print(path.read_text(), end="") mostra, quando esegui l’esempio, l’esatto contenuto del file come testo selezionabile.

Quando adatti gli esempi, controlla questi aspetti:

  • Le colonne del DataFrame aggiunto devono corrispondere a quelle del CSV ed essere nello stesso ordine. Pandas scrive i valori in base alla posizione; durante l’aggiunta non abbina le colonne CSV in base ai loro nomi.
  • Usa header=False per un file non vuoto con un’intestazione esistente. Un’intestazione ripetuta verrebbe letta come una normale riga di dati.
  • Scegli index=False se l’indice delle righe non fa parte dei tuoi dati. Altrimenti, includi la colonna dell’indice e tienine conto nella struttura del file.
  • La modalità di aggiunta inserisce testo alla fine del file; non verifica né corregge colonne, delimitatori o codifiche non corrispondenti. Mantieni queste impostazioni coerenti con il CSV esistente.
  • Se il file è vuoto, scrivi l’intestazione una sola volta, prima della prima riga di dati. Il controllo con tell() descritto sopra usa la posizione del file aperto in modalità di aggiunta per decidere se scriverla.

Per un controllo rapido in Python, carica il file risultante con pd.read_csv(path) e controlla le righe e i nomi delle colonne. In questo modo verifichi sia la tabella interpretata sia il testo scritto su disco.