Applicare una funzione a una colonna in Pandas Dataframe

Sathiya Sarathi 21 dicembre 2022
  1. I metodi pandas apply() e transform()
  2. Usa apply() per applicare una funzione alla colonna DataFrame di Pandas
  3. Usa transform() per applicare una funzione alla colonna DataFrame di Pandas
Applicare una funzione a una colonna in Pandas Dataframe

In Pandas, colonne e dataframe possono essere trasformati e manipolati usando metodi come apply() e transform(). Le trasformazioni desiderate vengono passate come argomenti ai metodi come funzioni. Ogni metodo ha le sue sottili differenze e utilità. Questo articolo introdurrà come applicare una funzione a una colonna o a un intero dataframe.

I metodi pandas apply() e transform()

Entrambi i metodi apply() e transform() operano su singole colonne e sull’intero dataframe. Il metodo apply() applica la funzione lungo un asse specificato. Passa le colonne come un dataframe alla funzione personalizzata, mentre un metodo transform() passa le singole colonne come pandas Series alla funzione personalizzata.

L’output del metodo apply() viene ricevuto sotto forma di un dataframe o Series a seconda dell’input, mentre come sequenza per il metodo transform(). Entrambe le sintassi dei metodi apply() e transform() sono simili a:

Dataframe.apply(customFunction, axis=0)
Dataframe.transform(customFunction, axis=0)

Gli argomenti corrispondono a

  • customFunction: la funzione da applicare al dataframe o alla serie.
  • axis: 0 si riferisce a 'rows' e 1 si riferisce a 'columns'; la funzione deve essere applicata su righe o colonne.

Usa apply() per applicare una funzione alla colonna DataFrame di Pandas

Ora che abbiamo imparato le basi, mettiamo le mani sui codici e capiamo come usare il metodo apply() per applicare una funzione a una colonna di dataframe.

Useremo il dataframe di esempio come di seguito.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)

applica una funzione alla colonna dataframe

Il codice di esempio per applicare una funzione all’intero DataFrame è mostrato di seguito.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df = df.apply(add_2)
print(df)

Produzione:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A   B   C
0  3   4   5
1  6   7   8
2  9  10  11

Come visto sopra, la funzione può essere applicata a tutto il dataframe.

Applicare una funzione a una singola colonna

Vediamo cosa succede quando la funzione viene applicata lungo una singola colonna.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df["A"] = df["A"].apply(add_2)
print(df)

# or #

df["A"].transform(add_2)
print(df)

Produzione:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A  B  C
0  3  2  3
1  6  5  6
2  9  8  9

Un altro esempio di applicazione di una funzione a una singola colonna

import numpy as np
import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {"A": [20, 30, 15, 25, 20], "B": [4, 5, 6, 4, 6], "C": [12, 15, 13, 12, 14]}
)
print("Initial DataFrame:")
print(data)

print("")

updated_df = data.apply(lambda x: x - 5 if x.name == "A" else x)
print("Updated DataFrame:")
print(updated_df)

Produzione:

Initial DataFrame:
    A  B   C
0  20  4  12
1  30  5  15
2  15  6  13
3  25  4  12
4  20  6  14

Updated DataFrame:
    A  B   C
0  15  4  12
1  25  5  15
2  10  6  13
3  20  4  12
4  15  6  14

Qui applichiamo la funzione lambda definita per ogni colonna nel DataFrame. La funzione sottrae il valore di ogni colonna per 5 solo se il nome della colonna è A.

import numpy as np
import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {"A": [20, 30, 15, 25, 20], "B": [4, 5, 6, 4, 6], "C": [12, 15, 13, 12, 14]}
)
print("Initial DataFrame:")
print(data)

print("")

data["A"] = data["A"].apply(lambda x: x - 5)
print("Updated DataFrame:")
print(data)

Produzione:

Initial DataFrame:
    A  B   C
0  20  4  12
1  30  5  15
2  15  6  13
3  25  4  12
4  20  6  14

Updated DataFrame:
    A  B   C
0  15  4  12
1  25  5  15
2  10  6  13
3  20  4  12
4  15  6  14

Applica la funzione lambda solo alla colonna A del DataFrame, e infine assegniamo i valori restituiti alla colonna A del DataFrame esistente.

Usa transform() per applicare una funzione alla colonna DataFrame di Pandas

Vediamo come utilizzare il metodo transform() per applicare una funzione a una colonna di dataframe. Useremo lo stesso dataframe di esempio come sopra.

Il codice di esempio per applicare una funzione all’intero DataFrame è mostrato di seguito.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df = df.transform(add_2)
print(df)

Produzione:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A   B   C
0  3   4   5
1  6   7   8
2  9  10  11

Come visto sopra, la funzione può essere applicata all’intero dataframe.

Applicare una funzione a una singola colonna

Vediamo cosa succede quando la funzione viene applicata lungo una singola colonna.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df["A"] = df["A"].transform(add_2)
print(df)

Produzione:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A  B  C
0  3  2  3
1  6  5  6
2  9  8  9

Articolo correlato - Pandas DataFrame