map() und applymap() für elementweise Operationen
Wenden Sie mit map() eine Funktion auf jedes Element einer Series und mit applymap() auf jede Zelle eines DataFrame an.
map() und applymap() für elementweise Operationen 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.
Übersicht über Series.map()
Series.map() wendet eine Funktion, ein Wörterbuch oder eine andere Series auf jedes Element einer Series an und gibt eine neue Series zurück. Anders als apply(), das komplexe Objekte erhalten kann, arbeitet map() immer mit einzelnen skalaren Werten. Es ist das Standardwerkzeug zum Kodieren kategorialer Werte, zum Nachschlagen von Bezeichnungen in einer Zuordnungstabelle oder zum Anwenden einer einfachen Transformation auf jedes Element.
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() mit einer Funktion
Übergeben Sie map() eine Funktion, einschließlich einer Lambda-Funktion, wenn die Transformation Logik statt einer Nachschlagetabelle erfordert. Die Funktion erhält jeweils einen skalaren Wert und kann daher nicht auf andere Zeilen oder Spalten zugreifen. Für eine einfache bedingte Zuweisung von Bezeichnungen ist map() mit einer Funktion übersichtlicher als eine Schleife, bei großen Series jedoch langsamer als 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() im Vergleich zu replace()
Sowohl map() als auch replace() können Werte mithilfe eines Wörterbuchs ersetzen. Der entscheidende Unterschied: map() gibt für jeden im Wörterbuch nicht gefundenen Wert NaN zurück, sofern Sie nicht anschließend fillna() verwenden, während replace() nicht übereinstimmende Werte unverändert lässt. Verwenden Sie replace(), wenn Sie nur bestimmte Werte ändern und alle anderen beibehalten möchten.
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() mit einer Series (Bezeichnungssuche)
Sie können map() eine andere Series als Nachschlagetabelle übergeben: Die Werte der aufrufenden Series werden als Schlüssel verwendet, um Werte im Index der Argument-Series nachzuschlagen. So können Sie eine Nachschlagetabelle kompakt verknüpfen, ohne einen vollständigen merge()-Aufruf zu benötigen — es funktioniert wie eine vektorisierte Wörterbuchsuche, bei der die Nachschlagetabelle nach dem Schlüssel indiziert ist.
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() für zellenweise Operationen
DataFrame.applymap() (in Pandas 2.1+ DataFrame.map() genannt) wendet eine Funktion auf jede einzelne Zelle eines DataFrames an. Anders als apply(axis=0), das eine vollständige Spalte erhält, bekommt applymap() jeweils einen skalaren Wert. Es eignet sich zum einheitlichen Formatieren aller Zellen — beispielsweise zum Runden jeder numerischen Zelle auf zwei Dezimalstellen oder zum Umwandeln jeder Zeichenkettenzelle in Kleinbuchstaben.
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() zur Zeichenkettenformatierung
Wenden Sie auf jede Zelle eines DataFrames mit gemischten Zeichenketten eine einheitliche Zeichenkettenformatierung an — beispielsweise, um alle Werte in die Schreibweise mit großem Anfangsbuchstaben zu überführen oder None in eine leere Zeichenkette umzuwandeln. applymap(str.strip) entfernt mit einem einzigen Aufruf Leerzeichen aus jeder Zelle des gesamten DataFrames und ist damit deutlich übersichtlicher, als die Spalten einzeln zu durchlaufen und auf jede .str.strip() anzuwenden.
df_str = pd.DataFrame({
'name': [' Alice ', 'Bob ', ' Carol'],
'city': ['new york ', ' london', 'paris ']
})
df_clean = df_str.applymap(str.strip)
print(df_clean)applymap() zur Währungsformatierung
Wenn Sie einen DataFrame für die Anzeige in einem Bericht vorbereiten, können Sie numerische Zellen mit applymap() als Währungszeichenketten formatieren. Dadurch werden Zahlen in anzeigefertige Zeichenketten umgewandelt, ohne die zugrunde liegenden Datentypen zu verändern — die Transformation gilt nur für die endgültige Ausgabe. Wenden Sie sie als letzten Schritt an, bevor Sie die formatierte Tabelle mit to_excel() oder to_html() exportieren.
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 in map umbenannt
In Pandas 2.1 wurde DataFrame.applymap() in DataFrame.map() umbenannt, um konsistent mit Series.map() zu sein. Der alte Aufruf applymap() funktioniert weiterhin, gibt jedoch eine Deprecation-Warnung aus. Prüfen Sie in produktivem Code Ihre Pandas-Version und verwenden Sie bei Version 2.1 oder höher df.map(func), um Deprecation-Warnungen in zukünftigen Versionen zu vermeiden.
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() zum Kodieren kategorialer Merkmale
Maschinelle Lernmodelle benötigen numerische Eingaben, daher müssen kategoriale Spalten kodiert werden. Verwenden Sie map() mit einem Wörterbuch zur Ganzzahlkodierung, um Kategorien vor der Übergabe eines DataFrames an ein Modell in Ordinalzahlen umzuwandeln. Bei nominalen Kategorien ohne natürliche Reihenfolge sind pd.get_dummies() oder der OneHotEncoder von scikit-learn vorzuziehen.
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() für eine mehrstufige Suche verketten
Verketten Sie zwei Aufrufe von map(), wenn Sie eine zweistufige Suche benötigen: Ordnen Sie zunächst einen Code einem Zwischenschlüssel zu und anschließend den Zwischenschlüssel einer endgültigen Bezeichnung. Beispielsweise können Sie die Produkt-SKU einem Kategoriecode und den Kategoriecode anschließend einem Kategorienamen zuordnen. Zwei verkettete Aufrufe von map() sind übersichtlicher als ein verschachteltes Wörterbuch oder ein merge() mit anschließendem weiteren 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)Elementweise Behandlung von Nullwerten mit map
Bei der Verwendung von map(func) wird die Funktion auch für NaN-Werte aufgerufen. Dies kann einen TypeError verursachen, wenn die Funktion None nicht verarbeitet. Sichern Sie die Funktion mit einer Prüfung auf Nullwerte mithilfe von pd.isna(x) ab oder verwenden Sie den Parameter na_action='ignore' in map(), um NaN-Werte zu überspringen und sie in der Ausgabe als NaN zu belassen, ohne die Funktion aufzurufen.
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)Kurze Überprüfung
Testen Sie Ihr Verständnis der Konzepte zur Datenanalyse aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie Folgendes gelernt: Series.map() für skalare Suchen mit Funktionen und Wörterbüchern zu verwenden, DataFrame.applymap()/map() für die zellenweise Formatierung über alle Spalten einzusetzen und den Unterschied zwischen map() und replace() beim Umgang mit nicht übereinstimmenden Werten zu verstehen. Als Nächstes sehen wir uns das Verketten von Methoden mit pipe() für übersichtliche Transformationspipelines an.
Lerne Python mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „map() und applymap() für elementweise Operationen“ kostenlos?
Ja — der vollständige Text von „map() und applymap() für elementweise Operationen“ 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 „map() und applymap() für elementweise Operationen“?
Wenden Sie mit map() eine Funktion auf jedes Element einer Series und mit applymap() auf jede Zelle eines DataFrame an. 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 „map() und applymap() für elementweise Operationen“?
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
- apply() auf Spalten und Zeilen
- apply() mit GroupBy
- map() und applymap() für elementweise Operationen
- Method Chaining mit pipe()