map() en applymap() voor elementgewijze bewerkingen
Pas met map() een functie toe op elk element van een Series en met applymap() op elke cel van een DataFrame.
map() en applymap() voor elementgewijze bewerkingen is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 3 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.
Overzicht van Series.map()
Series.map() past een functie, woordenboek of andere Series toe op elk element van een Series en retourneert een nieuwe Series. In tegenstelling tot apply(), dat complexe objecten kan ontvangen, werkt map() altijd met afzonderlijke scalaire waarden. Het is het standaardhulpmiddel voor het coderen van categorische waarden, het opzoeken van labels in een toewijzingstabel of het element voor element toepassen van een eenvoudige transformatie.
import pandas as pd
codes = pd.Series(['N', 'S', 'E', 'N', 'W'])
region_names = {'N': 'North', 'S': 'South', 'E': 'East', 'W': 'West'}
names = codes.map(region_names)
print(names)map() met een functie
Geef een functie (ook een lambda) door aan map() wanneer de transformatie logica bevat in plaats van een opzoektabel te gebruiken. De functie ontvangt steeds één scalaire waarde en heeft dus geen toegang tot andere rijen of kolommen. Voor een eenvoudige toewijzing van labels op basis van een voorwaarde is map() met een functie overzichtelijker dan een lus, maar voor grote Series trager dan np.where().
prices = pd.Series([5.0, 25.0, 80.0, 150.0])
category = prices.map(lambda p: 'budget' if p < 20 else 'mid' if p < 100 else 'premium')
print(category)map() tegenover replace()
Zowel map() als replace() kunnen waarden vervangen met behulp van een woordenboek. Het belangrijkste verschil: map() retourneert NaN voor waarden die niet in het woordenboek staan (tenzij je daarna fillna() gebruikt), terwijl replace() niet-overeenkomende waarden ongewijzigd laat. Gebruik replace() wanneer je alleen specifieke waarden wilt wijzigen en al het overige wilt behouden.
s = pd.Series(['A', 'B', 'C', 'D'])
map_dict = {'A': 'Alpha', 'B': 'Beta'}
print('map():', s.map(map_dict).tolist()) # C,D → NaN
print('replace():', s.replace(map_dict).tolist()) # C,D → unchangedmap() met een Series (labels opzoeken)
Je kunt een andere Series als opzoektabel aan map() doorgeven: de waarden van de aanroepende Series worden gebruikt als sleutels om waarden op te zoeken in de index van de Series die je als argument doorgeeft. Dit is een beknopte manier om een opzoektabel te koppelen zonder een volledige aanroep van merge() — het werkt als een gevectoriseerde woordenboekopzoeking waarbij de opzoektabel op sleutel is geïndexeerd.
prices_lookup = pd.Series(
[10.0, 25.0, 50.0],
index=['SKU-001', 'SKU-002', 'SKU-003']
)
orders = pd.Series(['SKU-002', 'SKU-001', 'SKU-003', 'SKU-001'])
order_prices = orders.map(prices_lookup)
print(order_prices)DataFrame.applymap() voor celbewerkingen
DataFrame.applymap() (in Pandas 2.1+ DataFrame.map() genoemd) past een functie toe op elke afzonderlijke cel van een DataFrame. In tegenstelling tot apply(axis=0), dat een volledige kolom ontvangt, ontvangt applymap() steeds één scalaire waarde. Dit is handig om alle cellen op dezelfde manier op te maken — bijvoorbeeld elke numerieke cel af te ronden op twee decimalen of elke tekstcel om te zetten naar kleine letters.
df = pd.DataFrame({
'a': [1.234, 5.678, 9.012],
'b': [3.456, 7.890, 2.345]
})
# Round every cell to 1 decimal place
df_rounded = df.applymap(lambda x: round(x, 1))
print(df_rounded)applymap() voor tekstopmaak
Pas consistente tekstopmaak toe op elke cel van een gemengd tekst-DataFrame — bijvoorbeeld alle waarden omzetten naar beginhoofdletters of None omzetten naar een lege tekenreeks. applymap(str.strip) verwijdert witruimte uit elke cel van het volledige DataFrame met één aanroep, wat veel beknopter is dan kolommen te doorlopen en op elke kolom afzonderlijk .str.strip() toe te passen.
df_str = pd.DataFrame({
'name': [' Alice ', 'Bob ', ' Carol'],
'city': ['new york ', ' london', 'paris ']
})
df_clean = df_str.applymap(str.strip)
print(df_clean)applymap() voor valutaopmaak
Wanneer je een DataFrame voorbereidt voor weergave in een rapport, kun je numerieke cellen met applymap() opmaken als valutatekenreeksen. Hierdoor worden getallen omgezet naar tekenreeksen die klaar zijn voor weergave, zonder de onderliggende gegevenstypen te wijzigen — de transformatie is alleen bedoeld voor de uiteindelijke uitvoer. Pas dit toe als laatste stap voordat je to_excel() of to_html() aanroept om de opgemaakte tabel te exporteren.
revenue_table = pd.DataFrame({
'North': [12300.0, 9800.0],
'South': [7400.0, 11200.0]
}, index=['Q1', 'Q2'])
formatted = revenue_table.applymap(lambda x: f'${x:,.0f}')
print(formatted)Pandas 2.1: applymap hernoemd naar map
In Pandas 2.1 is DataFrame.applymap() hernoemd naar DataFrame.map() om consistent te zijn met Series.map(). Het oude applymap() werkt nog steeds, maar geeft een verouderingswaarschuwing. Controleer in productiecode je Pandas-versie en gebruik df.map(func) als je versie 2.1 of hoger is, zodat je in toekomstige releases verouderingswaarschuwingen voorkomt.
import pandas as pd
print('Pandas version:', pd.__version__)
# Forward-compatible pattern:
if hasattr(pd.DataFrame, 'map'):
df_clean = df_str.map(str.strip) # Pandas 2.1+
else:
df_clean = df_str.applymap(str.strip) # Pandas < 2.1
print(df_clean)map() voor het coderen van categorische kenmerken
Modellen voor machine learning vereisen numerieke invoer, dus categorische kolommen moeten worden gecodeerd. Gebruik map() met een woordenboek voor gehele coderingen om categorieën om te zetten naar ordinale getallen voordat je een DataFrame aan een model doorgeeft. Gebruik voor nominale categorieën zonder natuurlijke volgorde liever pd.get_dummies() of OneHotEncoder van scikit-learn.
size_order = {'small': 0, 'medium': 1, 'large': 2, 'enterprise': 3}
df['size_encoded'] = df['order_size'].map(size_order)
print(df[['order_size', 'size_encoded']])map() koppelen voor opzoeken in meerdere stappen
Koppel twee aanroepen van map() wanneer je in twee niveaus wilt opzoeken: koppel eerst een code aan een tussensleutel en vervolgens de tussensleutel aan een definitief label. Je kunt bijvoorbeeld een product-SKU aan een categoriecode koppelen en daarna de categoriecode aan een categorienaam. Twee gekoppelde aanroepen van map() zijn overzichtelijker dan een genest woordenboek of een merge gevolgd door nog een merge.
sku_to_cat_code = {'SKU-001': 'C1', 'SKU-002': 'C2', 'SKU-003': 'C1'}
cat_code_to_name = {'C1': 'Electronics', 'C2': 'Apparel'}
skus = pd.Series(['SKU-001', 'SKU-002', 'SKU-003'])
cat_names = skus.map(sku_to_cat_code).map(cat_code_to_name)
print(cat_names)Elementgewijze verwerking van ontbrekende waarden met map
Bij het gebruik van map(func) wordt de functie ook aangeroepen voor NaN-waarden. Dat kan een TypeError veroorzaken als de functie niet met None overweg kan. Omwikkel de functie met een controle op ontbrekende waarden met behulp van pd.isna(x), of gebruik de parameter na_action='ignore' in map() om NaN-waarden over te slaan en ze als NaN in de uitvoer te behouden zonder de functie aan te roepen.
s = pd.Series([1.0, None, 3.0, None, 5.0])
# na_action='ignore' skips NaN values
result = s.map(lambda x: x * 2, na_action='ignore')
print(result)Korte controle
Test je begrip van de concepten voor gegevensanalyse uit deze les.
Samenvatting van de les
In deze les heb je geleerd: Series.map() gebruiken voor scalaire opzoekingen met functies en woordenboeken, DataFrame.applymap()/map() gebruiken voor celgewijze opmaak over alle kolommen en het verschil begrijpen tussen map() en replace() bij het verwerken van niet-overeenkomende waarden. Hierna bekijken we het koppelen van methoden met pipe() voor leesbare transformatieketens.
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 “map() en applymap() voor elementgewijze bewerkingen” gratis?
Ja — de volledige tekst van “map() en applymap() voor elementgewijze bewerkingen” 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 “map() en applymap() voor elementgewijze bewerkingen”?
Pas met map() een functie toe op elk element van een Series en met applymap() op elke cel van een DataFrame. 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 3 van 4.
Hoe lang duurt de les “map() en applymap() voor elementgewijze bewerkingen”?
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
- apply() op kolommen en rijen
- apply() met GroupBy
- map() en applymap() voor elementgewijze bewerkingen
- Method chaining met pipe()