HOWTO · Pandas

Pandas Anhängen an CSV

Dieses Tutorial demonstriert, wie man mit to_csv() im append-Modus Daten an eine bestehende CSV-Datei anfügt

Auf dieser Seite

Mit Pandas to_csv() und mode="a" lassen sich DataFrame-Zeilen an die bereits in einer CSV-Datei vorhandenen Zeilen anhängen. Der Append-Modus erhält den bestehenden Dateiinhalt. Setzen Sie header=False, wenn die Datei bereits eine Kopfzeile enthält, und index=False, wenn der DataFrame-Index nicht als zusätzliche CSV-Spalte ausgegeben werden soll.

Einen DataFrame an eine vorhandene CSV-Datei anhängen

Dieses Beispiel erstellt zunächst eine CSV-Datei und hängt anschließend einen zweiten DataFrame daran an. Verwenden Sie in Ihrem eigenen Code den Pfad zu Ihrer CSV-Datei. Achten Sie darauf, dass die angehängten Spalten in derselben Reihenfolge wie die vorhandenen CSV-Spalten stehen: CSV-Dateien speichern kein Schema, das Werte automatisch anhand der Spaltennamen neu anordnet.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

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="")

Beim ersten Schreibvorgang werden die Datei und ihre Kopfzeile erstellt. Beim zweiten wird mode="a" verwendet, um am Dateiende eine Zeile anzuhängen. header=False verhindert, dass die Spaltennamen wiederholt werden, und index=False sorgt dafür, dass Pandas den Zeilenindex nicht ergänzt. Die fertige Datei enthält zuerst die ursprüngliche und danach die hinzugefügte Zeile. Die Bezeichnungen name und score im unveränderten Beispiel bleiben auf Englisch. Wenn Sie den DataFrame-Index als Spalte übernehmen möchten, lassen Sie index=False weg und berücksichtigen Sie diese zusätzliche Spalte beim Einlesen der CSV-Datei.

Die Kopfzeile nur schreiben, wenn die CSV-Datei leer ist

Wenn die Zieldatei leer sein oder noch nicht existieren kann, öffnen Sie sie im Append-Modus und prüfen ihre aktuelle Dateiposition. Das Öffnen eines noch nicht vorhandenen Pfads mit mode="a" erstellt die Datei. Der Aufruf tell() gibt die aktuelle Position zurück; unmittelbar nach dem Öffnen im Append-Modus bedeutet die Position 0, dass die Datei leer ist. Schreiben Sie die Kopfzeile nur in diesem Fall.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

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)

Damit werden sowohl neue als auch bereits vorhandene CSV-Dateien behandelt: Eine neu erstellte oder leere Datei erhält die Spaltennamen, während an eine Datei mit Inhalt nur die neue Zeile angehängt wird. Verwenden Sie bei jedem Anhängen dieselbe Spaltenreihenfolge und kompatible Felder. Wenn mehrere Schreiber dieselbe Datei gleichzeitig aktualisieren können, koordinieren Sie ihre Schreibvorgänge, damit sich die Prüfung der Dateiposition und das Schreiben einer Zeile nicht mit einem anderen Schreibvorgang überschneiden.

Die angehängten Zeilen prüfen und häufige Fehler vermeiden

Lesen Sie die CSV-Datei nach dem Schreiben ein, wenn Sie ihren Inhalt überprüfen möchten. Im ersten Beispiel enthält die Datei eine Kopfzeile, gefolgt von den ursprünglichen und den angehängten Datensätzen. Die Anweisung print(path.read_text(), end="") zeigt beim Ausführen genau diesen Dateiinhalt als auswählbaren Text an. Die Bezeichnungen name und score im unveränderten Beispiel bleiben auf Englisch.

Beachten Sie beim Anpassen der Beispiele Folgendes:

  • Die Spalten des angehängten DataFrames müssen in derselben Reihenfolge den CSV-Spalten entsprechen. Pandas schreibt Werte nach ihrer Position und ordnet sie beim Anhängen nicht anhand der Spaltennamen zu.
  • Verwenden Sie header=False, wenn die nicht leere Datei bereits eine Kopfzeile enthält. Eine wiederholte Kopfzeile würde als gewöhnliche Datenzeile eingelesen.
  • Wählen Sie index=False, wenn der Zeilenindex nicht zu Ihren Daten gehört. Andernfalls müssen Sie die Indexspalte im Aufbau der Datei berücksichtigen.
  • Der Append-Modus hängt Text an das Dateiende an. Er prüft oder korrigiert keine abweichenden Spalten, Trennzeichen oder Kodierungen. Verwenden Sie dieselben Einstellungen wie für die vorhandene CSV-Datei.
  • Ist die Datei leer, schreiben Sie die Kopfzeile einmal vor der ersten Datenzeile. Die obige tell()-Prüfung verwendet dafür die Position der im Append-Modus geöffneten Datei.

Zur schnellen Kontrolle in Python können Sie die resultierende Datei mit pd.read_csv(path) laden und die Zeilen sowie Spaltennamen prüfen. So überprüfen Sie sowohl die eingelesene Tabelle als auch den auf die Festplatte geschriebenen Text.