Unterschied zwischen Pandas apply, map und applymap

Suraj Joshi 30 Januar 2023
  1. pandas.DataFrame.applymap()
  2. Methode map() in Pandas
  3. apply() Methode in Pandas
Unterschied zwischen Pandas apply, map und applymap

In diesem Tutorial wird der Unterschied zwischen den Methoden apply(), map() und applymap() in Pandas erklärt.

Die Funktion, die mit applymap() assoziiert ist, wird auf alle Elemente des gegebenen DataFrames angewendet, und daher ist die Methode applymap() nur für DataFrames definiert. In ähnlicher Weise kann die Funktion, die der Methode apply() zugeordnet ist, auf alle Elemente von DataFrame oder Series angewendet werden, und daher ist die Methode apply() sowohl für Series- als auch für DataFrame-Objekte definiert. Die Methode map() kann in Pandas nur für Series-Objekte definiert werden.

import pandas as pd

df = pd.DataFrame(
    {
        "Col 1": [30, 40, 50, 60],
        "Col 2": [23, 35, 65, 45],
        "Col 3": [85, 87, 90, 89],
    },
    index=["A", "B", "C", "D"],
)

print(df, "\n")

Ausgabe:

   Col 1  Col 2  Col 3
A     30     23     85
B     40     35     87
C     50     65     90
D     60     45     89

Wir werden den Unterschied zwischen den Methoden apply(), map() und applymap() in Pandas anhand des DataFrame df aus dem obigen Beispiel erklären.

pandas.DataFrame.applymap()

Syntax

DataFrame.applymap(func, na_action=None)

Sie wendet die Funktion func auf jedes Element des DataFrame an.

Beispiel: Verwenden der Methode applymap() zum Ändern von Elementen eines DataFrames

import pandas as pd

df = pd.DataFrame(
    {
        "Col 1": [30, 40, 50, 60],
        "Col 2": [23, 35, 65, 45],
        "Col 3": [85, 87, 90, 89],
    },
    index=["A", "B", "C", "D"],
)

print("Initial DataFrame:")
print(df, "\n")

scaled_df = df.applymap(lambda a: a * 10)

print("Scaled DataFrame:")
print(scaled_df, "\n")

Ausgabe:

Initial DataFrame:
   Col 1  Col 2  Col 3
A     30     23     85
B     40     35     87
C     50     65     90
D     60     45     89

Scaled DataFrame:
   Col 1  Col 2  Col 3
A    300    230    850
B    400    350    870
C    500    650    900
D    600    450    890

Sie multipliziert jedes Element des df DataFrame und speichert das Ergebnis im scaled_df DataFrame. Wir übergeben eine lambda-Funktion als Argument an die Funktion applymap(), die einen Wert durch Multiplikation der Eingabe mit 10 zurückgibt. Jedes Element des DataFrame df wird also mit 10 skaliert.

Wir können auch die for-Schleife verwenden, um über jedes Element im DataFrame df zu iterieren, aber das macht unseren Code weniger lesbar, unübersichtlich und weniger effizient. applymap() ist ein alternativer Ansatz, der den Code lesbarer und effizienter macht.

Neben mathematischen Operationen können wir auch andere Operationen mit den Elementen des DataFrame durchführen.

import pandas as pd

df = pd.DataFrame(
    {
        "Col 1": [30, 40, 50, 60],
        "Col 2": [23, 35, 65, 45],
        "Col 3": [85, 87, 90, 89],
    },
    index=["A", "B", "C", "D"],
)

print("Initial DataFrame:")
print(df, "\n")

altered_df = df.applymap(lambda a: str(a) + ".00")

print("Altered DataFrame:")
print(altered_df, "\n")

Ausgabe:

Initial DataFrame:
   Col 1  Col 2  Col 3
A     30     23     85
B     40     35     87
C     50     65     90
D     60     45     89

Altered DataFrame:
   Col 1  Col 2  Col 3
A  30.00  23.00  85.00
B  40.00  35.00  87.00
C  50.00  65.00  90.00
D  60.00  45.00  89.00

Es wird .00 an das Ende jedes Elements im DataFrame df angehängt.

Methode map() in Pandas

import pandas as pd

df = pd.DataFrame(
    {
        "Col 1": [30, 40, 50, 60],
        "Col 2": [23, 35, 65, 45],
        "Col 3": [85, 87, 90, 89],
    },
    index=["A", "B", "C", "D"],
)

print("Initial DataFrame:")
print(df, "\n")

df["Col 1"] = df["Col 1"].map(lambda x: x / 100)

print("DataFrame after altering Col 1:")
print(df)

Ausgabe:

Initial DataFrame:
   Col 1  Col 2  Col 3
A     30     23     85
B     40     35     87
C     50     65     90
D     60     45     89

DataFrame after altering Col 1:
   Col 1  Col 2  Col 3
A    0.3     23     85
B    0.4     35     87
C    0.5     65     90
D    0.6     45     89

Wir können die Methode map() nur mit der jeweiligen Spalte eines DataFrame verwenden.

apply() Methode in Pandas

Methode apply() zum Ändern des gesamten DataFrames in Pandas

import pandas as pd

df = pd.DataFrame(
    {
        "Col 1": [30, 40, 50, 60],
        "Col 2": [23, 35, 65, 45],
        "Col 3": [85, 87, 90, 89],
    },
    index=["A", "B", "C", "D"],
)

print("Initial DataFrame:")
print(df, "\n")

altered_df = df.apply(lambda x: x / 100)

print("Altered DataFrame:")
print(altered_df, "\n")

Ausgabe:

Initial DataFrame:
   Col 1  Col 2  Col 3
A     30     23     85
B     40     35     87
C     50     65     90
D     60     45     89

Altered DataFrame:
   Col 1  Col 2  Col 3
A    0.3   0.23   0.85
B    0.4   0.35   0.87
C    0.5   0.65   0.90
D    0.6   0.45   0.89

apply() Methode, um nur eine bestimmte Spalte in Pandas zu ändern

import pandas as pd

df = pd.DataFrame(
    {
        "Col 1": [30, 40, 50, 60],
        "Col 2": [23, 35, 65, 45],
        "Col 3": [85, 87, 90, 89],
    },
    index=["A", "B", "C", "D"],
)

print("Initial DataFrame:")
print(df, "\n")

df["Col 1"] = df["Col 1"].apply(lambda x: x / 100)

print("DataFrame after altering Col 1:")
print(df)

Ausgabe:

Initial DataFrame:
   Col 1  Col 2  Col 3
A     30     23     85
B     40     35     87
C     50     65     90
D     60     45     89

DataFrame after altering Col 1:
   Col 1  Col 2  Col 3
A    0.3     23     85
B    0.4     35     87
C    0.5     65     90
D    0.6     45     89

Aus den obigen Beispielen geht hervor, dass die Methode apply() verwendet werden kann, um eine bestimmte Funktion entweder auf alle Elemente des gesamten DataFrame oder auf alle Elemente einer bestimmten Spalte anzuwenden.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Pandas DataFrame