Diferencia entre pandas apply, map y applymap

Suraj Joshi 30 enero 2023
  1. pandas.DataFrame.applymap()
  2. map() Método en Pandas
  3. Método apply() en Pandas
Diferencia entre pandas apply, map y applymap

Este tutorial explica la diferencia entre los métodos apply(), map() y applymap() en Pandas.

La función asociada con applymap() se aplica a todos los elementos del DataFrame dado y, por lo tanto, el método applymap() se define solo para DataFrames. De manera similar, la función asociada con el método apply() se puede aplicar a todos los elementos de DataFrame o Series, y por lo tanto, el método apply() se define para los objetos Series y DataFrame. El método map() solo se puede definir para objetos Series en 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(df, "\n")

Producción :

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

Usaremos el DataFrame df mostrado en el ejemplo anterior para explicar la diferencia entre los métodos apply(), map() y applymap() en Pandas.

pandas.DataFrame.applymap()

Sintaxis

DataFrame.applymap(func, na_action=None)

Aplica la función func a cada elemento del DataFrame.

Ejemplo: utilice el método applymap() para modificar elementos de un DataFrame

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")

Producción :

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

Multiplica todos los elementos del DataFrame df y almacena el resultado en el DataFrame scaled_df. Pasamos una función lambda como argumento a la función applymap(), que devuelve un valor al multiplicar la entrada por 10. Entonces, cada elemento del DataFrame df se escala en 10.

También podemos usar el bucle for para iterar sobre cada elemento en el DataFrame df, pero hace que nuestro código sea menos legible, desordenado y menos eficiente. applymap() es un enfoque alternativo que hace que el código sea más legible y eficiente.

Además de las operaciones matemáticas, también podemos realizar otras operaciones a los elementos del DataFrame.

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")

Producción :

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

Agrega .00 al final de cada elemento en el DataFrame df.

map() Método en 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)

Producción :

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

Solo podemos usar el método map() con la columna particular de un DataFrame.

Método apply() en Pandas

apply() Método para alterar todo el DataFrame en 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")

Producción :

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() Método para alterar una columna particular solo en 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"].apply(lambda x: x / 100)

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

Producción :

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

Por lo tanto, a partir de los ejemplos anteriores, podemos ver que el método apply() se puede usar para aplicar una función particular a todos los elementos del DataFrame completo o oa todos los elementos de una columna en particular.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Artículo relacionado - Pandas DataFrame