CSV-Dateien in Python einlesen

CSV-Dateien (Comma-Separated Values) sind eines der häufigsten Formate für Daten in der Programmierung. Ob du Daten aus Excel-Tabellen, Web-Exporten oder Datenbanken importieren willst – CSV-Dateien sind überall. In diesem Tutorial zeigen wir dir, wie du CSV-Dateien in Python einliest – mit praktischen Beispielen und Lösungen für häufige Probleme.

Was ist eine CSV-Datei?

Eine CSV-Datei ist eine Textdatei, die Daten in tabellarischer Form speichert. Jede Zeile entspricht einer Datensatz, und die Spalten sind durch Kommas (oder andere Trennzeichen) getrennt.

Beispiel einer CSV-Datei:

Name,Alter,Stadt
Max Mustermann,25,Berlin
Maria Schmidt,30,Hamburg
Peter Weber,35,München

Wie liest man eine CSV-Datei in Python?

Python bietet zwei Hauptmethoden, um CSV-Dateien zu lesen:

  1. Mit der csv-Bibliothek (Standardbibliothek)
  2. Mit pandas (beliebte Datenanalyse-Bibliothek)

1. CSV-Datei mit der csv-Bibliothek einlesen

Die csv-Bibliothek ist Teil der Standardbibliothek und eignet sich gut für einfachen Datenzugriff.

Grundlegender Code:

import csv

with open('daten.csv', newline='', encoding='utf-8') as datei:
    reader = csv.reader(datei)
    for zeile in reader:
        print(zeile)

Mit Spaltenüberschriften (DictReader):

Wenn deine CSV-Datei eine Kopfzeile hat, kannst du sie als Dictionary lesen:

import csv

with open('daten.csv', newline='', encoding='utf-8') as datei:
    reader = csv.DictReader(datei)
    for zeile in reader:
        print(zeile['Name'], zeile['Alter'])

2. CSV-Datei mit pandas einlesen

Für komplexere Datenanalysen ist pandas oft die bessere Wahl.

Installation:

pip install pandas

Grundlegender Code:

import pandas as pd

# CSV-Datei einlesen
df = pd.read_csv('daten.csv')
print(df)

Häufige Probleme und Lösungen

Beim Einlesen von CSV-Dateien treten oft Probleme auf. Hier sind die häufigsten:

Problem 1: UnicodeDecodeError

Fehlermeldung:
UnicodeDecodeError: 'utf-8' codec can't decode byte ...

Lösung:
Verwende das korrekte Encoding:

import csv

# Versuche verschiedene Encodings
with open('daten.csv', newline='', encoding='latin1') as datei:
    reader = csv.reader(datei)
    for zeile in reader:
        print(zeile)

# Oder mit pandas
df = pd.read_csv('daten.csv', encoding='latin1')

Hinweis: Häufige Encodings: utf-8, latin1, cp1252

Problem 2: Falsches Trennzeichen

Fehlermeldung:
Daten werden nicht korrekt getrennt.

Lösung:
Gib das richtige Trennzeichen an:

import csv

# Für Semikolon-getrennte Dateien
with open('daten.csv', newline='', encoding='utf-8') as datei:
    reader = csv.reader(datei, delimiter=';')
    for zeile in reader:
        print(zeile)

# Mit pandas
df = pd.read_csv('daten.csv', sep=';')

Problem 3: Leere Zeilen oder fehlende Werte

Lösung mit pandas:

import pandas as pd

# Leere Zeilen ignorieren
df = pd.read_csv('daten.csv', skip_blank_lines=True)

# Fehlende Werte als NaN behandeln
df = pd.read_csv('daten.csv', na_values=['', 'NULL', 'N/A'])

Problem 4: Datentypen werden falsch interpretiert

Lösung:
Definiere Datentypen explizit:

import pandas as pd

# Explizite Datentypen festlegen
df = pd.read_csv('daten.csv', dtype={'Alter': 'int64', 'Gehalt': 'float64'})

Problem 5: Zeilenumbrüche in Zellen

Lösung:
Verwende quoting Parameter:

import csv

with open('daten.csv', newline='', encoding='utf-8') as datei:
    reader = csv.reader(datei, quoting=csv.QUOTE_MINIMAL)
    for zeile in reader:
        print(zeile)

Vergleich: csv vs pandas

Eigenschaftcsv-Bibliothekpandas
InstallationsaufwandKeine zusätzlichepip install pandas
DatenanalyseEingeschränktSehr gut
SpeicherverwaltungWeniger effizientEffizient
SpaltenoperationenBegrenztSehr gut
FehlerbehandlungGrundlegendUmfassend

Best Practices

  1. Immer newline='' angeben beim Öffnen von Dateien
  2. Encoding explizit festlegen (meist utf-8)
  3. Für Datenanalysen pandas verwenden
  4. Fehlerbehandlung implementieren
  5. Daten validieren nach dem Einlesen

Beispiel: Vollständiges Skript

import pandas as pd

def csv_einlesen(datei):
    try:
        # Versuche, die CSV-Datei mit pandas zu lesen
        df = pd.read_csv(datei, encoding='utf-8')
        print("Daten erfolgreich eingelesen:")
        print(df.head())
        return df
    except UnicodeDecodeError:
        print("UTF-8 Encoding fehlgeschlagen. Versuche Latin-1...")
        try:
            df = pd.read_csv(datei, encoding='latin1')
            print("Daten mit Latin-1 Encoding eingelesen:")
            print(df.head())
            return df
        except Exception as e:
            print(f"Fehler beim Einlesen: {e}")
            return None

# Verwendung
daten = csv_einlesen('daten.csv')

Fazit

CSV-Dateien sind ein grundlegendes Format für Daten in der Programmierung. Mit der csv-Bibliothek kannst du einfach auf Daten zugreifen, während pandas für komplexere Analysen perfekt geeignet ist. Durch das Verständnis häufiger Probleme und deren Lösungen kannst du deine CSV-Einlesungen zuverlässig und effizient gestalten.

Ob du nun eine einfache Tabelle oder komplexe Datenanalyse durchführst – mit diesen Kenntnissen bist du bestens vorbereitet!


Hinweis: Für weitere Funktionen wie das Speichern von CSV-Dateien, Datenfilterung, Aggregationen und vieles mehr, schaue dir die offizielle Dokumentation der csv-Bibliothek und pandas an.