HOWTO · Pandas
Schreiben eines Pandas DataFrame nach CSV
Dieses Tutorial erklärt, wie wir einen DataFrame in eine CSV-Datei schreiben können, indem wir die Funktion pandas.DataFrame.to_csv() verwenden.
Auf dieser Seite
Dieses Tutorial zeigt, wie Sie einen DataFrame mit pandas.DataFrame.to_csv() als CSV-Datei speichern. Die Methode schreibt die Spaltenwerte als durch Trennzeichen getrennten Text. Standardmäßig schreibt sie außerdem den DataFrame-Index als erstes Feld jeder Zeile.
Syntax von pandas.DataFrame.to_csv()
Beim grundlegenden Aufruf geben Sie einen Zielpfad an: df.to_csv("midterm.csv"). Für diese Aufgabe sind vor allem die Optionen index zum Ein- oder Ausschließen der Zeilenbeschriftungen, sep zur Wahl des Trennzeichens und encoding zur Wahl der Textkodierung wichtig. Die Methode bietet weitere Optionen für Kopfzeilen, Spalten, Formatierung und den Umgang mit Dateien. Einzelheiten dazu finden Sie in der verlinkten API-Referenz.
Einen DataFrame in eine CSV-Datei schreiben
Erstellen Sie den DataFrame und rufen Sie to_csv() mit einem Pfad auf. pandas schreibt dann eine durch Kommas getrennte Datei. Dieses Beispiel verwendet Noten von Studierenden und speichert die Datei unter midterm.csv. Der bereitgestellte Ausführungsnachweis bestätigt, dass das Beispiel erfolgreich abgeschlossen wurde, enthält aber nicht die Dateibytes. Daher ist der folgende Inhalt als erwartet gekennzeichnet.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
mid_term_marks = {
"Student": ["Kamal", "Arun", "David", "Thomas", "Steven"],
"Economics": [10, 8, 6, 5, 8],
"Fine Arts": [7, 8, 5, 9, 6],
"Mathematics": [7, 3, 5, 8, 5],
}
mid_term_marks_df = pd.DataFrame(mid_term_marks)
mid_term_marks_df.to_csv("midterm.csv")
with open("midterm.csv", encoding="utf-8") as csv_file:
print(csv_file.read(), end="")
Erwarteter Dateiinhalt (wird auch vom Beispiel ausgegeben):
,Student,Economics,Fine Arts,Mathematics
0,Kamal,10,7,7
1,Arun,8,8,3
2,David,6,5,5
3,Thomas,5,9,8
4,Steven,8,6,5
Da index=True der Standardwert ist, beginnt die Kopfzeile mit einem leeren Feld für den Index, und jede Datenzeile beginnt mit ihrem Indexwert. Diese Werte sind Beschriftungen des DataFrame und keine seiner benannten Spalten. Die Datei wird relativ zum aktuellen Arbeitsverzeichnis des Prozesses gespeichert. Geben Sie einen absoluten oder anderweitig passenden Pfad an, wenn Sie ein bestimmtes Ziel benötigen.
Einen DataFrame ohne Index als CSV speichern
Setzen Sie index=False, wenn das empfangende System nur die benannten Spalten des DataFrame erwartet. Für das obige Beispiel schreibt mid_term_marks_df.to_csv("midterm.csv", index=False) eine Kopfzeile, die mit Student beginnt, sowie Datenzeilen, die mit Namen wie Kamal anfangen. Diese Option bestimmt nur, ob pandas den Index in die Datei schreibt; der Index im DataFrame selbst wird dadurch weder entfernt noch geändert. Behalten Sie den Standardwert bei, wenn die Zeilenbeschriftungen für die Leserinnen und Leser der Datei wichtige Daten darstellen.
Beim Schreiben einer CSV-Datei ein Trennzeichen festlegen
Mit dem Argument sep legen Sie das Feldtrennzeichen fest. Für eine durch Tabulatoren getrennte Ausgabe verwenden Sie mid_term_marks_df.to_csv("midterm.tsv", index=False, sep="\t"). Die Felder werden durch Tabulatorzeichen getrennt, nicht durch mehrere Leerzeichen. Das ist wichtig, wenn ein anderes Programm die Datei einliest. Die Erweiterung .tsv ist eine hilfreiche Konvention für tabulatorgetrennte Werte; den tatsächlichen Dateiinhalt bestimmt jedoch das Trennzeichenargument, unabhängig vom Dateinamen.
Einen Kodierungsfehler beim Schreiben einer CSV-Datei behandeln
Der hier behandelte Fehler ist UnicodeEncodeError. Er kann auftreten, wenn der Text Zeichen enthält, die mit der ausgewählten Kodierung nicht darstellbar sind. Geben Sie eine Kodierung an, die den Text unterstützt, zum Beispiel mit mid_term_marks_df.to_csv("midterm.csv", encoding="utf-8"), und verwenden Sie dieselbe Kodierung beim Einlesen der Datei im empfangenden Programm. UTF-8 unterstützt ein breites Spektrum an Text. Eine andere Kodierung ändert jedoch weder das Trennzeichen noch entfernt sie den Index. Welcher konkrete Fehler auftritt, hängt von den Daten und der verwendeten Kodierung ab. Das Beispiel oben zeigt daher ein Lösungsmuster und keine gezielte Nachbildung eines bestimmten Fehlers.