HOWTO · Pandas

Lesen Sie die GZ-Datei in Pandas

Dieses Schreiben demonstriert die Verwendung einer Python-Bibliothek namens Pandas zum Lesen einer gz-Datei.

Auf dieser Seite

Mit pandas.read_csv() laden Sie eine gzip-komprimierte CSV-Datei direkt in einen DataFrame. Übergeben Sie den Pfad zur .csv.gz-Datei und setzen Sie bei Bedarf compression="gzip"; pandas entpackt die Datei beim Einlesen ihres CSV-Inhalts. Das folgende Beispiel erstellt eine kleine lokale Datei, sodass Sie es ohne den Download eines Datensatzes ausführen können. Ersetzen Sie beim Anpassen den temporären Pfad durch den Pfad zu Ihrer eigenen Datei.

Eine gzip-komprimierte CSV-Datei mit pandas einlesen

Die Endung .gz kennzeichnet die gzip-Komprimierung, nicht das Format der enthaltenen Daten. Ein gzip-Archiv kann CSV-Text enthalten, aber auch ein anderes Format. Verwenden Sie read_csv, wenn der entpackte Inhalt kommagetrennter Text ist. pandas kann die Komprimierung in gängigen Fällen anhand der Endung .gz erkennen. Mit compression="gzip" geben Sie die gewünschte Komprimierung ausdrücklich an. Das ist hilfreich, wenn sich der Komprimierungstyp nicht aus einem Pfad oder Dateiobjekt erkennen lässt.

Führen Sie dieses Beispiel aus. Die Beschriftungen und Ausgaben im unveränderten Beispiel bleiben auf Englisch:

import gzip
import tempfile
from pathlib import Path

import pandas as pd

with tempfile.TemporaryDirectory() as directory:
    csv_gz_path = Path(directory) / "sales.csv.gz"
    with gzip.open(csv_gz_path, "wt", encoding="utf-8", newline="") as file:
        file.write("item,quantity\nnotebook,3\npen,8\n")

    sales = pd.read_csv(csv_gz_path, compression="gzip")
    print(sales.head())

Die Datei wird in einem temporären Verzeichnis erstellt und steht read_csv während desselben Programmlaufs zur Verfügung. Das Beispiel verwendet UTF-8-Text im gzip-Datenstrom. Die CSV-Datei enthält eine Kopfzeile und zwei Datensätze. Bei einer vorhandenen Datei können Sie die Ladezeile beibehalten und csv_gz_path durch den tatsächlichen Dateipfad ersetzen.

read_csv für Ihre Datei konfigurieren

read_csv gibt einen pandas-DataFrame zurück. Standardmäßig stammen dessen Spaltennamen aus der CSV-Kopfzeile. Im Beispiel legt compression="gzip" fest, wie die Eingabe entpackt wird. Diese Angabe ist optional, wenn pandas gzip anhand des Dateinamens mit der Endung .gz erkennen kann. Das Standardtrennzeichen ist ein Komma; daher ist auch sep="," normalerweise nicht erforderlich. Für eine Datei mit Tabulatoren als Trennzeichen verwenden Sie stattdessen sep="\t".

Mit dem Standardwert header="infer" wird die erste Zeile als Spaltennamen behandelt. Bei dieser Datei entspricht das header=0. Verwenden Sie header=None, wenn die Datei keine Kopfzeile hat. Mit names=[...] können Sie Spaltennamen festlegen. Das Standard-Anführungszeichen für das Einlesen von CSV-Daten ist quotechar='"'. Ein Feld in Anführungszeichen kann ein Komma enthalten, ohne dadurch in mehrere Spalten aufgeteilt zu werden. Ändern Sie quotechar nur, wenn die Datei eine andere Anführungszeichenkonvention verwendet.

Relative Pfade werden ausgehend vom aktuellen Arbeitsverzeichnis des Prozesses interpretiert; absolute Pfade beziehen sich nicht darauf. Wie im Beispiel gezeigt, können Sie ein Path-Objekt als Eingabepfad verwenden. Ein Pfad als Zeichenkette funktioniert ebenfalls. Für einen Windows-Pfad eignet sich ein Raw-String wie r"C:\data\sales.csv.gz". Alternativ können Sie Pfade mit pathlib erstellen, um Probleme mit maskierten Backslashes zu vermeiden.

Den resultierenden DataFrame prüfen und verwenden

Die Variable sales ist ein DataFrame. Sie können daraus Spalten auswählen, Zeilen filtern und das Objekt an andere pandas-Operationen übergeben. sales.head() gibt standardmäßig die ersten fünf Zeilen zurück; mit sales.head(10) fordern Sie zehn Zeilen an. So lässt sich schnell prüfen, ob die Kopfzeile als Spaltennamen übernommen wurde und die Werte in den erwarteten Spalten stehen. Einen Überblick über die eingelesenen Spaltenbezeichnungen und Datentypen erhalten Sie mit sales.columns und sales.dtypes.

Welche Zeilen angezeigt werden, hängt von der geladenen Datei und den pandas-Anzeigeeinstellungen ab. Wenn Sie einen echten Datensatz dokumentieren, sollte die Ausgabe als Text auswählbar bleiben. Betrachten Sie eine Vorschau nicht als vollständige Prüfung aller Zeilen einer großen Datei.

Probleme mit Format und Pfad beheben

Wenn Python meldet, dass die Datei nicht gefunden wurde, prüfen Sie Schreibweise, Groß- und Kleinschreibung sowie das Verzeichnis. Bei einem relativen Pfad sollten Sie außerdem das aktuelle Arbeitsverzeichnis überprüfen. Bei einem Dateiobjekt oder einem Namen ohne Endung .gz setzen Sie compression="gzip" ausdrücklich, falls die Bytes gzip-komprimiert sind. Meldet pandas einen Fehler beim Entpacken, vergewissern Sie sich, dass es sich tatsächlich um gzip-Daten handelt und die Datei nicht abgeschnitten wurde.

Gelingt das Entpacken, aber das Einlesen der CSV-Daten schlägt fehl oder sehen die Spalten falsch aus, prüfen Sie den entpackten Inhalt und stimmen Sie die Einleseoptionen darauf ab. Häufige Ursachen sind, read_csv für ein gzip-komprimiertes Format zu verwenden, das keine CSV-Datei ist, das falsche Trennzeichen zu wählen oder bei einer Datei ohne Kopfzeile die erste Datenzeile als Spaltennamen zu behandeln. Felder in Anführungszeichen können Trennzeichen enthalten. Mit einem passend eingestellten quotechar bleiben solche Werte in einem Feld. gzip dient nur der Komprimierung: Ein anderes Dateiformat wird dadurch nicht in CSV umgewandelt.