Textspalten kombinieren und bereinigen
Verketten Sie mehrere Spalten zu einem String, entfernen Sie Leerzeichen und vereinheitlichen Sie inkonsistente Kategorienamen.
Textspalten kombinieren und bereinigen ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.
Textspalten verketten
Eine häufige Aufgabe bei der Datenvorbereitung besteht darin, durch das Kombinieren von Werten aus mehreren Spalten einen einzelnen String zu erstellen – beispielsweise einen vollständigen Namen aus Vor- und Nachnamen oder eine Adresse aus Straße, Ort und Land. In Pandas verketten Sie String-Spalten mit dem Operator + auf zwei Series (oder einer Series und einem Stringliteral), nachdem Sie numerische Spalten mit .astype(str) in Strings umgewandelt haben.
import pandas as pd
df = pd.DataFrame({
'first_name': ['Alice', 'Bob', 'Carol'],
'last_name': ['Smith', 'Jones', 'White']
})
df['full_name'] = df['first_name'] + ' ' + df['last_name']
print(df['full_name'].tolist())
# ['Alice Smith', 'Bob Jones', 'Carol White']Mit Nicht-String-Spalten verketten
Wenn Sie eine numerische Spalte mit einer String-Spalte kombinieren, müssen Sie die numerische Spalte zunächst mit .astype(str) in einen String umwandeln. Pythons Operator + löst einen TypeError aus, wenn Sie versuchen, eine String-Series und eine Integer-Series zu addieren. Das ist eine häufige Fehlerquelle beim Erstellen zusammengesetzter Schlüssel oder Bezeichnungen aus Spalten mit unterschiedlichen Datentypen.
import pandas as pd
df = pd.DataFrame({
'product': ['Widget', 'Gadget'],
'version': [3, 5]
})
# Must convert int to str before concatenating
df['label'] = df['product'] + ' v' + df['version'].astype(str)
print(df['label'].tolist())
# ['Widget v3', 'Gadget v5'].str.cat() zum Verknüpfen mit Trennzeichen
Series.str.cat(others, sep=) ist die Pandas-native Methode, um mehrere Series mit einem Trennzeichen zu verketten und dabei NaN-Werte korrekt zu behandeln. Standardmäßig führt ein NaN in einer beliebigen Spalte dazu, dass das Ergebnis für diese Zeile NaN ist. Übergeben Sie na_rep='?' (oder eine beliebige Zeichenkette), um NaN durch einen Platzhalter zu ersetzen, anstatt den Wert weiterzugeben.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'city': ['NYC', 'LA', None],
'state': ['NY', None, 'TX'],
'country': ['USA', 'USA', 'USA']
})
# Join with ', ' — NaN rows produce NaN by default
df['location'] = df['city'].str.cat(
[df['state'], df['country']],
sep=', ',
na_rep='N/A'
)
print(df['location'].tolist())
# ['NYC, NY, USA', 'LA, N/A, USA', 'N/A, TX, USA']Inkonsistente Kategorienbezeichnungen normalisieren
In Kategorien-Spalten realer Daten finden sich häufig inkonsistente Bezeichnungen, die durch Tippfehler, unterschiedliche Groß- und Kleinschreibung oder verschiedene Abkürzungen entstehen (z. B. 'US', 'USA', 'United States'). Üblicherweise erstellen Sie ein Mapping-Dictionary, das jede Variante auf die kanonische Form abbildet, und wenden es anschließend mit .map() oder .replace() an.
import pandas as pd
df = pd.DataFrame({
'country': ['US', 'USA', 'United States', 'uk', 'UK', 'United Kingdom']
})
canonical = {
'US': 'United States', 'USA': 'United States', 'United States': 'United States',
'uk': 'United Kingdom', 'UK': 'United Kingdom', 'United Kingdom': 'United Kingdom'
}
df['country_clean'] = df['country'].map(canonical)
print(df['country_clean'].tolist())
# ['United States', 'United States', 'United States',
# 'United Kingdom', 'United Kingdom', 'United Kingdom']Leerraum entfernen und Groß-/Kleinschreibung vereinheitlichen
Bevor Sie Textspalten vergleichen oder gruppieren, sollten Sie als ersten Bereinigungsschritt immer Leerraum entfernen und die Groß- und Kleinschreibung vereinheitlichen. Zwei Werte, die für einen Menschen gleich aussehen (' Active' und 'active'), behandelt Pandas aufgrund des führenden Leerzeichens und des Unterschieds bei der Großschreibung als verschieden. Eine zweistufige Kette – zuerst strip, dann lower – behebt beide Probleme.
import pandas as pd
df = pd.DataFrame({
'status': [' Active', 'INACTIVE', 'active ', ' Pending ', 'ACTIVE']
})
df['status_clean'] = df['status'].str.strip().str.lower()
print(df['status_clean'].value_counts())
# active 3
# inactive 1
# pending 1Fuzzy Matching zur Korrektur von Tippfehlern
Wenn Tippfehler einen exakten Abgleich verhindern, berechnet Fuzzy Matching Ähnlichkeitswerte zwischen Zeichenketten. Die Bibliothek rapidfuzz (oder das klassische fuzzywuzzy) stellt vektorisierte Verfahren für Fuzzy Matching bereit. Ein typischer Ablauf: Suchen Sie für jeden eindeutigen fehlerhaften Wert den ähnlichsten kanonischen Wert oberhalb eines Ähnlichkeitsschwellenwerts und erstellen Sie daraus ein Korrektur-Mapping.
# Conceptual example (requires: pip install rapidfuzz)
from rapidfuzz import process
canonical_cities = ['New York', 'Los Angeles', 'Chicago', 'Houston']
dirty_values = ['New Yrok', 'Los Angelas', 'Chicagoo']
for dirty in dirty_values:
best, score, _ = process.extractOne(dirty, canonical_cities)
print(f'{dirty!r} -> {best!r} (score={score:.0f}%)')
# 'New Yrok' -> 'New York' (score=91%)
# 'Los Angelas'-> 'Los Angeles' (score=96%)
# 'Chicagoo' -> 'Chicago' (score=94%)Zellen mit mehreren Werten mit explode() aufteilen
Manchmal enthält eine Zelle mehrere durch ein Trennzeichen getrennte Werte (z. B. 'python,sql,pandas'). Teilen Sie die Spalte auf, um Listen zu erhalten, und rufen Sie anschließend .explode() auf, um für jeden Wert eine eigene Zeile zu erstellen. Dadurch wird eine breite, zusammengepackte Zelle in ein tidy long format umgewandelt, in dem jede Zeile genau einen Wert enthält – eine Voraussetzung für groupby- und Join-Operationen mit diesen Werten.
import pandas as pd
df = pd.DataFrame({
'user_id': [1, 2, 3],
'skills': ['python,sql', 'java,kotlin,sql', 'python']
})
df['skills'] = df['skills'].str.split(',')
exploded = df.explode('skills')
print(exploded)
# user_id skills
# 0 1 python
# 0 1 sql
# 1 2 java
# 1 2 kotlin
# 1 2 sql
# 2 3 pythonGemischte Zeichenkodierungen in Text verarbeiten
Textdaten aus verschiedenen Quellen können Kodierungsprobleme aufweisen – etwa ungewöhnliche Zeichen wie \xa0 (geschütztes Leerzeichen), \u2019 (typografisches Apostroph) oder fehlerhaft dargestellte Zeichen mit Akzenten. Verwenden Sie .str.encode('ascii', errors='replace').str.decode('ascii') für eine schnelle Bereinigung auf ASCII-Basis oder .str.normalize('NFKD'), um Akzente vor dem Entfernen in ihre Bestandteile zu zerlegen.
import pandas as pd
import unicodedata
df = pd.DataFrame({'name': ['Caf\u00e9', 'na\u00efve', 'r\u00e9sum\u00e9']})
# Normalize and strip accents (NFKD decomposition + ascii encoding)
df['name_ascii'] = (
df['name']
.str.normalize('NFKD')
.str.encode('ascii', errors='ignore')
.str.decode('ascii')
)
print(df)
# name name_ascii
# 0 Cafe Cafe
# 1 naive naive
# 2 resume resumeZusammengesetzte Schlüssel erstellen
In vielen Datensätzen müssen Sie aus mehreren Spalten einen zusammengesetzten Schlüssel erstellen, um eine Zeile für Joins oder das Entfernen von Duplikaten eindeutig zu identifizieren. Wenn Sie bereinigte Zeichenketten-Spalten (Leerraum entfernt, in Kleinschreibung umgewandelt und normalisiert) zu einer einzigen Schlüsselzeichenkette kombinieren, ist ein konsistenter Abgleich über verschiedene Datenquellen hinweg gewährleistet, selbst wenn dieselbe Entität in den Quellen leicht unterschiedlich geschrieben wird.
import pandas as pd
df = pd.DataFrame({
'first': [' Alice', 'BOB', ' Carol'],
'last': ['Smith ', 'JONES', 'White '],
'dob': ['1990-01-15', '1985-07-22', '1992-11-30']
})
df['match_key'] = (
df['first'].str.strip().str.lower() + '|' +
df['last'].str.strip().str.lower() + '|' +
df['dob']
)
print(df['match_key'].tolist())
# ['alice|smith|1990-01-15', 'bob|jones|1985-07-22', 'carol|white|1992-11-30']Eine kanonische Kategorienliste erzwingen
Überprüfen Sie nach der Bereinigung, ob alle Werte einer kategorialen Textspalte zu einer bekannten kanonischen Menge gehören. Ein Wert, der nicht in dieser Menge enthalten ist, kann auf eine neue, gültige Kategorie oder einen Datenfehler hinweisen. Protokollieren oder markieren Sie unbekannte Werte zur manuellen Prüfung, anstatt sie stillschweigend zu verwerfen, damit nichts unbemerkt bleibt.
import pandas as pd
df = pd.DataFrame({
'status': ['active', 'inactive', 'active', 'archived', 'unknown_status']
})
canonical = {'active', 'inactive', 'archived'}
unknown = df[~df['status'].isin(canonical)]['status'].unique()
print('Unknown statuses:', unknown.tolist())
# ['unknown_status']
# Flag unknown rows
df['status_valid'] = df['status'].isin(canonical)
print(df)Vollständige Textbereinigungspipeline
Hier sehen Sie eine vollständige Pipeline zur Textbereinigung, die alle Techniken dieser Lektion anwendet: Leerraum entfernen, Groß- und Kleinschreibung vereinheitlichen, Abkürzungen korrigieren, Sonderzeichen entfernen und gegen eine kanonische Liste prüfen. Eine solche wiederverwendbare Funktion würden Sie typischerweise jedem Modul zur Datenaufnahme hinzufügen.
import pandas as pd
def clean_category_column(series, canonical_map, canonical_set):
cleaned = (
series
.str.strip()
.str.lower()
.map(lambda x: canonical_map.get(x, x)) # fix known variants
)
unknown = cleaned[~cleaned.isin(canonical_set)]
if not unknown.empty:
print('Warning: unknown values:', unknown.unique().tolist())
return cleaned
cmap = {'eng': 'engineering', 'hr': 'human_resources', 'mktg': 'marketing'}
cset = {'engineering', 'human_resources', 'marketing', 'finance'}
df = pd.DataFrame({'dept': ['Eng', 'HR', 'Marketing', 'MKTG', 'Legal']})
df['dept_clean'] = clean_category_column(df['dept'], cmap, cset)
print(df)Kurze Überprüfung
Testen Sie Ihr Verständnis beim Kombinieren und Bereinigen von Textspalten.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: Spalten nach der Umwandlung numerischer Werte in Zeichenketten mit dem + operator zu verketten, mit str.cat(sep=) Werte durch ein Trennzeichen zu verbinden und NaN zu behandeln, mit .map() ein kanonisches Mapping anzuwenden, um inkonsistente Bezeichnungen zu normalisieren, und mit explode() Zellen mit Listenwerten in Zeilen aufzuteilen. Erzwingen Sie kanonische Mengen, um Probleme mit der Datenqualität frühzeitig zu erkennen. Als Nächstes sortieren wir DataFrames nach Spaltenwerten.
Häufig gestellte Fragen
Ist die Lektion „Textspalten kombinieren und bereinigen“ kostenlos?
Ja — der vollständige Text von „Textspalten kombinieren und bereinigen“ 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 „Textspalten kombinieren und bereinigen“?
Verketten Sie mehrere Spalten zu einem String, entfernen Sie Leerzeichen und vereinheitlichen Sie inkonsistente Kategorienamen. 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 4 von 4.
Wie lange dauert die Lektion „Textspalten kombinieren und bereinigen“?
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
- Der .str-Accessor
- Strings aufteilen und ersetzen
- Musterabgleich mit regulären Ausdrücken
- Textspalten kombinieren und bereinigen