Differenza tra Pandas apply, map e applymap

Suraj Joshi 30 gennaio 2023
  1. pandas.DataFrame.applymap()
  2. Metodo map() in Pandas
  3. Metodo apply() in Pandas
Differenza tra Pandas apply, map e applymap

Questo tutorial spiega la differenza tra i metodi apply(), map() e applymap() in Pandas.

La funzione associata a applymap() è applicata a tutti gli elementi del dato DataFrame, e quindi il metodo applymap() è definito solo per DataFrame. Allo stesso modo, la funzione associata al metodo apply() può essere applicata a tutti gli elementi di DataFrame o Series, e quindi il metodo apply() è definito sia per gli oggetti Series che per gli oggetti DataFrame. Il metodo map() può essere definito solo per oggetti Series 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(df, "\n")

Produzione:

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

Useremo il DataFrame df mostrato nell’esempio sopra per spiegare la differenza tra i metodi apply(), map() e applymap() in Pandas.

pandas.DataFrame.applymap()

Sintassi

DataFrame.applymap(func, na_action=None)

Applica la funzione func ad ogni elemento del DataFrame.

Esempio: utilizzare il metodo applymap() per modificare gli elementi di 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")

Produzione:

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

Moltiplica ogni elemento di df DataFrame e memorizza il risultato in scaled_df DataFrame. Passiamo una funzione lambda come argomento alla funzione applymap(), che restituisce un valore moltiplicando l’input per 10. Quindi ogni elemento del DataFrame df viene scalato di 10.

Possiamo anche usare il cicli for per iterare su ogni elemento nel DataFrame df, ma rende il nostro codice meno leggibile, disordinato e meno efficiente. applymap() è un approccio alternativo che rende il codice più leggibile ed efficiente.

Oltre alle operazioni matematiche, possiamo anche eseguire altre operazioni sugli elementi 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")

Produzione:

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

Aggiunge .00 alla fine di ogni elemento nel DataFrame df.

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

Produzione:

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

Possiamo usare il metodo map() solo con la particolare colonna di un DataFrame.

Metodo apply() in Pandas

Metodo apply() per modificare l’intero DataFrame 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")

Produzione:

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() Metodo per modificare una colonna specifica solo nei 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)

Produzione:

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

Quindi, dagli esempi precedenti, possiamo vedere che il metodo apply() può essere utilizzato per applicare una particolare funzione a tutti gli elementi dell’intero DataFrame oa tutti gli elementi di una particolare colonna.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Articolo correlato - Pandas DataFrame