Inkonsistente Kategorien standardisieren
Vereinheitlichen Sie Freitext-Kategoriespalten, indem Sie Aliase abbilden, Tippfehler per Fuzzy Matching korrigieren und eine kanonische Liste durchsetzen.
Inkonsistente Kategorien standardisieren ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Problem uneinheitlicher Kategorien
Wenn Kategoriedaten von Menschen eingegeben werden, erscheint dasselbe Konzept oft in vielen unterschiedlichen Schreibweisen: Electronics, electronics, ELECTRONICS, Electronicss. Eine GroupBy-Operation auf dieser Spalte erzeugt Dutzende kleiner Gruppen statt einer aussagekräftigen Gruppe. Die Standardisierung von Kategorien auf eine kanonische Liste ist einer der wichtigsten Bereinigungsschritte vor jeder Aggregation oder der Erstellung von Features für maschinelles Lernen.
import pandas as pd
df = pd.read_csv('products.csv')
print(df['category'].value_counts().head(20))Groß- und Kleinschreibung sowie Leerzeichen normalisieren
Der erste und einfachste Standardisierungsschritt besteht darin, Groß- und Kleinschreibung sowie Leerzeichen zu normalisieren. Wenden Sie .str.strip().str.lower() an, um führende und abschließende Leerzeichen zu entfernen und alles in Kleinbuchstaben umzuwandeln, bevor Sie andere Vergleiche durchführen. Durch diesen einen Schritt werden viele Varianten zusammengeführt: Electronics, electronics und ' Electronics ' werden nach der Normalisierung alle zu electronics.
df['category_clean'] = df['category'].str.strip().str.lower()
print('Before:', df['category'].nunique())
print('After:', df['category_clean'].nunique())Aliase mit einem Dict zuordnen
Auch nach der Normalisierung der Groß- und Kleinschreibung bleiben viele Varianten aufgrund von Abkürzungen, Synonymen oder alten Bezeichnungen unterschiedlich. Erstellen Sie ein Dictionary für die Alias-Zuordnung, dessen Schlüssel die Varianten und dessen Werte die kanonische Form enthalten. Wenden Sie es mit df['category_clean'].map(alias_map).fillna(df['category_clean']) an – fillna bewahrt Werte, die nicht im Dictionary enthalten sind, statt sie durch NaN zu ersetzen.
alias_map = {
'elect': 'electronics',
'elec': 'electronics',
'tech': 'electronics',
'clothing': 'apparel',
'clothes': 'apparel',
'garments': 'apparel'
}
df['category_clean'] = df['category_clean'].map(alias_map).fillna(df['category_clean'])
print(df['category_clean'].value_counts().head())str.replace für die Korrektur von Mustern verwenden
Manche Kategorienamen enthalten einheitliche Formatierungsfehler wie doppelte Leerzeichen oder nachgestellte Zahlen. Verwenden Sie .str.replace() mit einem regulären Ausdruck, um diese Muster in allen Zeilen gleichzeitig zu korrigieren. Beispielsweise reduziert .str.replace(r'\s+', ' ', regex=True) mehrere Leerzeichen auf eines, und .str.replace(r'\d+$', '', regex=True) entfernt nachgestellte Ziffern aus Kategorienamen.
df['category_clean'] = (
df['category_clean']
.str.replace(r'\s+', ' ', regex=True) # collapse spaces
.str.replace(r'\d+$', '', regex=True) # strip trailing numbers
.str.strip()
)
print(df['category_clean'].value_counts())Fuzzy Matching mit difflib
Wenn Tippfehler nicht vorhersehbar sind, verwenden Sie Fuzzy Matching, um für jede Variante die ähnlichste kanonische Kategorie zu finden. Pythons integriertes difflib.get_close_matches() gibt anhand der Zeichenkettenähnlichkeit die besten Treffer aus einer Liste gültiger Kategorien zurück. Wenden Sie es als Hilfsfunktion über df['category'].apply() an, um Varianten aufzulösen, die allein mit map() nicht erkannt werden.
from difflib import get_close_matches
CANONICAL = ['electronics', 'apparel', 'home', 'sports', 'beauty']
def fuzzy_fix(val):
matches = get_close_matches(str(val).lower().strip(), CANONICAL, n=1, cutoff=0.7)
return matches[0] if matches else val
df['category_fuzzy'] = df['category_clean'].apply(fuzzy_fix)
print(df[['category_clean', 'category_fuzzy']].head(10))Eine kanonische Kategorieliste erstellen
Definieren Sie Ihre kanonischen Kategorien ausdrücklich, statt sie aus den Daten abzuleiten. Eine fest codierte Liste zwingt jeden Wert durch eine Validierungsprüfung; Werte, die nicht in der Liste enthalten sind, werden als unbekannt markiert. Pflegen Sie die kanonische Liste in einer Konfigurationsdatei oder in einer separaten DataFrame-Spalte, damit sie leicht aktualisiert werden kann, wenn das Unternehmen eine neue Produktkategorie hinzufügt, ohne den Bereinigungscode anzupassen.
CANONICAL_CATEGORIES = {
'electronics', 'apparel', 'home', 'sports',
'beauty', 'food', 'toys', 'automotive'
}
df['is_known_category'] = df['category_fuzzy'].isin(CANONICAL_CATEGORIES)
unknown = df[~df['is_known_category']]['category_fuzzy'].unique()
print('Unknown categories remaining:', unknown)Unbekannte Kategorien behandeln
Unbekannte Kategorien, die nach der Korrektur per Fuzzy Matching keinem kanonischen Wert entsprechen, sollten unter der Bezeichnung Other zusammengefasst und nicht verworfen werden, damit keine Zeilen unbemerkt verloren gehen. Setzen Sie sie mit np.where() oder einer einfachen bedingten Zuweisung auf 'other'. Protokollieren Sie, wie viele Zeilen 'other' zugeordnet wurden, und prüfen Sie sie auf Muster, die eine neue kanonische Kategorie rechtfertigen könnten.
import numpy as np
df['category_final'] = np.where(
df['category_fuzzy'].isin(CANONICAL_CATEGORIES),
df['category_fuzzy'],
'other'
)
print(df['category_final'].value_counts())Einen kategorialen Dtype erzwingen
Nach der Standardisierung konvertieren Sie die bereinigte Kategoriespalte in den Pandas-Datentyp Categorical und geben dabei explizit eine Liste gültiger Kategorien an. Dadurch wird das Schema durchgesetzt: Jeder Versuch, eine ungültige Kategorie zuzuweisen, löst einen Fehler aus. Außerdem wird der Speicherbedarf reduziert, da die Kategorietexte intern als Ganzzahlcodes gespeichert werden, und groupby-Operationen auf großen DataFrames werden beschleunigt.
df['category_final'] = pd.Categorical(
df['category_final'],
categories=list(CANONICAL_CATEGORIES) + ['other']
)
print(df['category_final'].dtype)
print(df['category_final'].cat.categories)Bereinigte Spalte validieren
Führen Sie nach allen Standardisierungsschritten eine abschließende Validierung durch: Stellen Sie sicher, dass in der bereinigten Spalte kein Wert außerhalb der kanonischen Wertemenge vorhanden ist. Verwenden Sie assert df['category_final'].isin(valid_set).all(). Platzieren Sie diese Assertion am Ende der Bereinigungsfunktion, damit sie bei jeder Ausführung der Pipeline ausgeführt wird und Regressionen erkennt, wenn neue Rohdaten bisher unbekannte Kategorien enthalten.
valid_set = set(CANONICAL_CATEGORIES) | {'other'}
assert df['category_final'].isin(valid_set).all(), 'Invalid category found'
print('All categories valid. Distribution:')
print(df['category_final'].value_counts())Änderungen an der Standardisierung nachverfolgen
Erstellen Sie eine Differenztabelle, die für jede geänderte Zeile den ursprünglichen Wert und seine bereinigte Ersetzung zeigt. Dieser Prüfpfad ermöglicht es den Datenverantwortlichen, einzelne Zuordnungen zu überprüfen und zu genehmigen oder abzulehnen. Verwenden Sie eine boolesche Maske, um geänderte Zeilen auszuwählen, und vergleichen Sie die ursprüngliche und die finale Spalte nebeneinander. Exportieren Sie die Differenzen als CSV-Datei, damit nichttechnische Beteiligte sie überprüfen können.
changed = df['category'] != df['category_final']
diff_table = df[changed][['category', 'category_final']].drop_duplicates()
diff_table.columns = ['original', 'mapped_to']
print(f'Unique mappings applied: {len(diff_table)}')
print(diff_table)Standardisierten Datensatz speichern
Ersetzen Sie die ursprüngliche, uneinheitliche Kategoriespalte durch die standardisierte Spalte und entfernen Sie vor dem Speichern alle temporären Arbeitsspalten. Speichern Sie das Alias-Zuordnungswörterbuch und den Schwellenwert für die Fuzzy-Korrektur in der Pipeline-Konfiguration, damit die Standardisierung vollständig reproduzierbar ist. Ein Bereinigungslauf zwei Monate später mit einem neuen Datenexport sollte für dieselben Eingabewerte identische Ergebnisse liefern.
df_out = df.drop(columns=['category_clean', 'category_fuzzy', 'is_known_category'])
df_out = df_out.rename(columns={'category_final': 'category'})
df_out.to_parquet('products_clean.parquet', index=False)
print('Saved. Category distribution:')
print(df_out['category'].value_counts())Kurzüberprüfung
Testen Sie Ihr Verständnis der Konzepte zur Datenanalyse aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: Groß-/Kleinschreibung und Leerzeichen als ersten Standardisierungsschritt zu normalisieren, Aliase zuzuordnen und Fuzzy Matching zur Korrektur von Tippfehlern anzuwenden sowie eine kanonische Kategorienliste mit dem Datentyp Categorical und Assertions durchzusetzen. Als Nächstes beschäftigen wir uns mit der Schemavalidierung und Assertions zur Laufzeit, um jede Pipeline-Phase abzusichern.
Häufig gestellte Fragen
Ist die Lektion „Inkonsistente Kategorien standardisieren“ kostenlos?
Ja — der vollständige Text von „Inkonsistente Kategorien standardisieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Inkonsistente Kategorien standardisieren“?
Vereinheitlichen Sie Freitext-Kategoriespalten, indem Sie Aliase abbilden, Tippfehler per Fuzzy Matching korrigieren und eine kanonische Liste durchsetzen. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?
Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Inkonsistente Kategorien standardisieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?
Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Duplikate erkennen und entfernen
- Ausreißer erkennen und behandeln
- Inkonsistente Kategorien standardisieren
- Schemas validieren und Assertions