alltools.one
Data
2025-07-01
8 min
alltools.one Team
CSVData CleaningData AnalysisETLPython

CSV-Datenbereinigungstipps für Analysten und Entwickler

CSV-Dateien sind das universelle Austauschformat für tabellarische Daten. Sie sind einfach, für Menschen lesbar und werden von jedem Tool unterstützt — von Excel bis pandas. Aber CSV-Dateien aus der Praxis sind oft unsauber — inkonsistente Kodierungen, fehlende Werte, gemischte Datentypen und fehlerhafte Zeilen. Dieser Leitfaden behandelt praktische Techniken zur zuverlässigen Bereinigung von CSV-Daten.

Häufige CSV-Probleme

1. Kodierungsprobleme

Das frustrierendste CSV-Problem ist die Kodierung. Eine in Excel unter Windows erstellte Datei verwendet möglicherweise windows-1252, während Ihr Python-Skript utf-8 erwartet.

Symptome: Verstümmelte Zeichen (Mojibake) wie é statt é, oder UnicodeDecodeError-Ausnahmen.

Erkennung:

import chardet

with open('data.csv', 'rb') as f:
    result = chardet.detect(f.read(10000))
    print(result)  # {'encoding': 'Windows-1252', 'confidence': 0.73}

Lösung: Mit der erkannten Kodierung lesen, dann als UTF-8 speichern:

import pandas as pd

df = pd.read_csv('data.csv', encoding='windows-1252')
df.to_csv('data_clean.csv', encoding='utf-8', index=False)

2. Inkonsistente Trennzeichen

Nicht alle „CSVs" verwenden Kommas. Europäische CSV-Dateien verwenden oft Semikolons, da Kommas in vielen europäischen Gebietseinstellungen als Dezimaltrennzeichen dienen.

# Trennzeichen automatisch erkennen
import csv

with open('data.csv', 'r') as f:
    dialect = csv.Sniffer().sniff(f.read(5000))
    print(f"Trennzeichen: {repr(dialect.delimiter)}")

Unser CSV-Editor erkennt Trennzeichen automatisch — fügen Sie Ihre Daten ein und er identifiziert das Format.

3. Fehlende Werte

Fehlende Daten erscheinen in vielen Formen: leere Zellen, NA, N/A, null, - oder nur Leerzeichen.

# Alle Darstellungen fehlender Werte standardisieren
df = pd.read_csv('data.csv', na_values=['NA', 'N/A', 'null', '-', '', ' '])

# Fehlende Werte pro Spalte prüfen
print(df.isnull().sum())

# Strategie 1: Zeilen mit fehlenden kritischen Feldern entfernen
df = df.dropna(subset=['email', 'name'])

# Strategie 2: Mit Standardwerten füllen
df['country'] = df['country'].fillna('Unknown')

# Strategie 3: Vorwärts füllen (Zeitreihen)
df['price'] = df['price'].ffill()

4. Doppelte Zeilen

Exakte Duplikate sind leicht zu finden. Unscharfe Duplikate (dieselbe Person mit leicht unterschiedlicher Namensschreibweise) sind schwieriger.

# Exakte Duplikate finden
duplicates = df[df.duplicated(keep=False)]
print(f"{len(duplicates)} doppelte Zeilen gefunden")

# Duplikate entfernen, erstes Vorkommen behalten
df = df.drop_duplicates()

# Duplikate basierend auf bestimmten Spalten entfernen
df = df.drop_duplicates(subset=['email'], keep='last')

5. Inkonsistente Datenformate

Daten in gemischten Formaten, Telefonnummern mit und ohne Landesvorwahl, inkonsistente Groß-/Kleinschreibung:

# Datumsformate standardisieren
df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=False)

# Textfelder standardisieren
df['name'] = df['name'].str.strip().str.title()
df['email'] = df['email'].str.strip().str.lower()

# Telefonnummern standardisieren (einfach)
df['phone'] = df['phone'].str.replace(r'[^0-9+]', '', regex=True)

6. Datentypprobleme

CSV speichert alles als Text. Zahlen mit führenden Nullen, Postleitzahlen und Telefonnummern können beim Parsen ihre Formatierung verlieren:

# Führende Nullen bei Postleitzahlen erhalten
df = pd.read_csv('data.csv', dtype={'zip_code': str, 'phone': str})

# Währungszeichenfolgen in Zahlen konvertieren
df['price'] = df['price'].str.replace('$', '').str.replace(',', '').astype(float)

Validierung nach der Bereinigung

Validieren Sie immer Ihre bereinigten Daten:

# Zeilenanzahl prüfen (haben wir unerwartet Zeilen verloren oder gewonnen?)
print(f"Zeilen: {len(df)}")

# Datentypen prüfen
print(df.dtypes)

# Wertebereiche prüfen
print(df.describe())

# Auf verbleibende Nullwerte prüfen
print(df.isnull().sum())

# Eindeutigkeitsbedingungen validieren
assert df['email'].is_unique, "Doppelte E-Mails gefunden!"

Kommandozeilen-Tools

Für schnelle Bereinigung ohne Code zu schreiben:

# Kodierung konvertieren
iconv -f WINDOWS-1252 -t UTF-8 input.csv > output.csv

# Sortieren und doppelte Zeilen entfernen
sort -u input.csv > output.csv

# Bestimmte Spalten extrahieren (cut)
cut -d',' -f1,3,5 input.csv > output.csv

# Zeilen filtern (awk)
awk -F',' '$3 > 100' input.csv > filtered.csv

Für komplexere Transformationen bieten Tools wie csvkit eine vollständige Suite von CSV-Hilfsprogrammen:

# Installieren
pip install csvkit

# Spaltennamen anzeigen
csvcut -n data.csv

# Zeilen filtern
csvgrep -c country -m "USA" data.csv > usa_only.csv

# In JSON konvertieren
csvjson data.csv > data.json

Konvertierung zwischen CSV und JSON? Unser CSV-zu-JSON-Konverter erledigt das sofort.

FAQ

Was ist die maximale Dateigröße für CSV-Verarbeitung?

Es gibt keine inhärente Grenze im CSV-Format. Die praktische Grenze hängt von Ihren Tools ab: Excel verarbeitet etwa 1 Million Zeilen, pandas funktioniert gut bis zu mehreren GB bei ausreichend RAM, und Tools wie Dask oder Polars verarbeiten Datensätze, die größer als der Arbeitsspeicher sind. Für browserbasierte Tools verarbeitet unser CSV-Editor Dateien bis zu 100 MB.

Sollte ich CSV oder JSON für den Datenaustausch verwenden?

CSV eignet sich am besten für flache, tabellarische Daten (Tabellenkalkulation, Datenbankexporte, einfache Listen). JSON ist besser für verschachtelte, hierarchische Daten (API-Antworten, Konfigurationen, Dokumente mit unterschiedlicher Struktur). Für einen detaillierten Vergleich siehe unseren CSV vs JSON vs XML-Leitfaden.

Verwandte Ressourcen

Published on 2025-07-01
CSV Data Cleaning Tips for Analysts and Developers | alltools.one