Diferença entre Pandas apply, map e applymap

Suraj Joshi 30 janeiro 2023
  1. pandas.DataFrame.applymap()
  2. Método map() em Pandas
  3. Método apply() em Pandas
Diferença entre Pandas apply, map e applymap

Este tutorial explica a diferença entre os métodos apply(), map() e applymap() no Pandas.

A função associada a applymap() é aplicada a todos os elementos do DataFrame fornecido e, portanto, o método applymap() é definido apenas para DataFrames. Da mesma forma, a função associada ao método apply() pode ser aplicada a todos os elementos de DataFrame ou Series e, portanto, o método apply() é definido para objetos Series e DataFrame. O método map() só pode ser definido para objetos Series no 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")

Resultado:

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

Usaremos o DataFrame df exibido no exemplo acima para explicar a diferença entre os métodos apply(), map() e applymap() no Pandas.

pandas.DataFrame.applymap()

Sintaxe

DataFrame.applymap(func, na_action=None)

Ele aplica a função func a cada elemento do DataFrame.

Exemplo: Use o método applymap() para alterar itens de um 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")

Resultado:

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

Ele multiplica cada elemento de df DataFrame e armazena o resultado em scaled_df DataFrame. Passamos uma função lambda como um argumento para a função applymap(), que retorna um valor multiplicando a entrada por 10. Portanto, cada elemento do DataFrame df é escalado em 10.

Também podemos usar o loop for para iterar sobre cada elemento no DataFrame df, mas torna nosso código menos legível, confuso e menos eficiente. applymap() é uma abordagem alternativa que torna o código mais legível e eficiente.

Além das operações matemáticas, também podemos realizar outras operações nos elementos do 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")

Resultado:

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

Ele anexa .00 no final de cada elemento no DataFrame df.

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

Resultado:

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

Só podemos usar o método map() com a coluna particular de um DataFrame.

Método apply() em Pandas

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

Resultado:

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

Método apply() para alterar coluna particular apenas em 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)

Resultado:

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

Portanto, a partir dos exemplos acima, podemos ver que o método apply() pode ser usado para aplicar uma função específica a todos os elementos de todo o DataFrame ou a todos os elementos de uma coluna específica.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Artigo relacionado - Pandas DataFrame