Tekstkolommen combineren en opschonen
Voeg meerdere kolommen samen tot één string, verwijder witruimte en normaliseer inconsistente categorielabels.
Tekstkolommen combineren en opschonen is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.
Tekstkolommen samenvoegen
Een veelvoorkomende taak bij gegevensvoorbereiding is het maken van één tekenreeks door waarden uit meerdere kolommen te combineren — bijvoorbeeld een volledige naam maken uit voor- en achternaam, of een adres uit straat, plaats en land. In Pandas voegt u tekenreekskolommen samen met de operator + op twee Series (of een Series en een tekenreeksletterlijke waarde), nadat u numerieke kolommen met .astype(str) naar tekenreeksen hebt geconverteerd.
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']Samenvoegen met niet-tekenreekskolommen
Wanneer u een numerieke kolom met een tekenreekskolom combineert, moet u de numerieke kolom eerst met .astype(str) naar een tekenreeks converteren. De operator + van Python genereert een TypeError wanneer u een tekenreeks-Series en een integer-Series probeert op te tellen. Dit is een veelvoorkomende bron van verwarring bij het maken van samengestelde sleutels of labels uit kolommen met verschillende typen.
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() voor samenvoegen met scheidingsteken
Series.str.cat(others, sep=) is de Pandas-eigen manier om meerdere Series samen te voegen met een scheidingsteken, waarbij NaN-waarden netjes worden afgehandeld. Standaard zorgt een NaN in een kolom ervoor dat het resultaat voor die rij NaN is. Geef na_rep='?' (of een willekeurige tekenreeks) door om NaN te vervangen door een tijdelijke aanduiding in plaats van deze waarde door te geven.
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']Inconsistente categorielabels normaliseren
Kolommen met categorieën uit de praktijk bevatten vaak inconsistente labels door typefouten, verschillen in hoofdletters en kleine letters of verschillende afkortingen (bijvoorbeeld 'US', 'USA', 'United States'). De standaardoplossing is een toewijzingswoordenboek te maken dat elke variant aan de canonieke vorm koppelt en dit vervolgens toe te passen met .map() of .replace().
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']Hoofdletters en kleine letters standaardiseren
Voordat je tekstkolommen vergelijkt of groepeert, moet je altijd eerst witruimte verwijderen en het hoofdlettergebruik normaliseren. Twee waarden die er voor een mens hetzelfde uitzien (' Active' en 'active'), worden door Pandas als verschillend behandeld vanwege de voorloopspatie en het verschil in hoofdletters. Een keten in twee stappen — eerst strippen en daarna lower — vangt beide problemen op.
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 1Benaderende overeenkomsten voor correctie van typefouten
Wanneer typefouten exacte overeenkomsten verhinderen, berekent benaderend vergelijken gelijken scores tussen tekenreeksen. De bibliotheek rapidfuzz (of de klassieke fuzzywuzzy) biedt gevectoriseerde benaderende overeenkomsten. Een gebruikelijke werkwijze is: zoek voor elke unieke vervuilde waarde de dichtstbijzijnde canonieke waarde boven een gelijkenisdrempel en bouw een correctietoewijzing.
# 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%)Cellen met meerdere waarden splitsen met explode()
Soms bevat een cel meerdere waarden die door een scheidingsteken van elkaar worden gescheiden (bijvoorbeeld 'python,sql,pandas'). Splits de kolom om lijsten te verkrijgen en roep daarna .explode() aan om één rij per waarde te maken. Hiermee zet je een brede, volgepakte cel om in een opgeruimd lang formaat waarin elke rij precies één waarde bevat — noodzakelijk voor groupby- en join-bewerkingen op die waarden.
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 pythonGemengde tekencodering in tekst verwerken
Tekstgegevens uit verschillende bronnen kunnen coderingsproblemen bevatten — vreemde tekens zoals \xa0 (een vaste spatie), \u2019 (een gebogen apostrof) of vervormde tekens met accenten. Gebruik .str.encode('ascii', errors='replace').str.decode('ascii') voor een snelle opschoning die alleen ASCII gebruikt, of .str.normalize('NFKD') om accenten op te splitsen voordat je ze verwijdert.
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 resumeSamengestelde sleutels maken
In veel gegevensverzamelingen moet je een samengestelde sleutel uit meerdere kolommen maken om een rij uniek te identificeren voor joins of het verwijderen van dubbele waarden. Door opgeschoonde tekenreekskolommen (gestript, omgezet naar kleine letters en genormaliseerd) te combineren tot één sleutelreeks, zorg je voor consistente overeenkomsten tussen gegevensbronnen waarin dezelfde entiteit in elke bron iets anders gespeld kan zijn.
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']Een canonieke categorielijst afdwingen
Controleer na het opschonen of alle waarden in een categorische tekstkolom tot een bekende canonieke verzameling behoren. Een waarde die niet in de verzameling staat, kan wijzen op een nieuwe legitieme categorie of op een gegevensfout. Registreer onbekende waarden of markeer ze voor handmatige controle in plaats van ze stilzwijgend te verwijderen, zodat niets onopgemerkt blijft.
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)Volledige pijplijn voor tekstopschoning
Hier is een volledige pijplijn voor tekstopschoning die alle technieken uit deze les toepast: witruimte verwijderen, hoofdlettergebruik normaliseren, afkortingen corrigeren, speciale tekens verwijderen en controleren aan de hand van een canonieke lijst. Dit is het soort herbruikbare functie dat je aan elke module voor het inlezen van gegevens zou toevoegen.
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)Korte controle
Test je begrip van het combineren en opschonen van tekstkolommen.
Samenvatting van de les
In deze les heb je geleerd om kolommen samen te voegen met de +-operator nadat je numerieke waarden naar tekenreeksen hebt omgezet, str.cat(sep=) te gebruiken om waarden met een scheidingsteken samen te voegen en NaN af te handelen, een canonieke toewijzing met .map() toe te passen om inconsistente labels te normaliseren en explode() te gebruiken om cellen met lijstwaarden uit te breiden naar rijen. Dwing canonieke verzamelingen af om problemen met de gegevenskwaliteit vroegtijdig te ontdekken. Hierna sorteren we DataFrames op kolomwaarden.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Tekstkolommen combineren en opschonen” gratis?
Ja — de volledige tekst van “Tekstkolommen combineren en opschonen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.
Wat leer ik in “Tekstkolommen combineren en opschonen”?
Voeg meerdere kolommen samen tot één string, verwijder witruimte en normaliseer inconsistente categorielabels. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?
Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Tekstkolommen combineren en opschonen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?
Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- De accessor .str
- Strings splitsen en vervangen
- Patronen matchen met regex
- Tekstkolommen combineren en opschonen