Funzione Pandas DataFrame DataFrame.apply()

Suraj Joshi 30 gennaio 2023
  1. Sintassi di pandas.DataFrame.apply():
  2. Codici di esempio: metodo DataFrame.apply()
  3. Codici di esempio: applica la funzione a ciascuna colonna con DataFrame.apply()
  4. Codici di esempio: applica la funzione a ciascuna riga con il metodo DataFrame.apply()
  5. Codici di esempio: Metodo DataFrame.apply() con parametro result_type
Funzione Pandas DataFrame DataFrame.apply()

La funzione pandas.DataFrame.apply() applica la funzione di input a ogni elemento lungo la riga o la colonna del chiamante Pandas DataFrame.

Sintassi di pandas.DataFrame.apply():

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)

Parametri

func La funzione da applicare a ogni riga o colonna
axis applica la funzione lungo la riga (axis = 0) o la colonna (axis = 1)
raw Booleano. Riga / colonna passata come oggetto Series (raw=False) o oggetto ndarray (raw=True)
result_type {'expand', 'reduce', 'broadcast', 'None'}
tipo di output dell’operazione applicabile solo per axis=1 (colonne)
Novità nella versione 0.23.0
args Argomenti posizionali per la funzione func.
**kwds Argomenti delle parole chiave per la funzione func.

Ritorno

Restituisce il DataFrame dopo aver applicato la funzione di input lungo l’asse specificato.

Codici di esempio: metodo DataFrame.apply()

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: x**2)
print(modified_df)

Produzione:

   X  Y
0  1  4
1  2  1
2  3  8
   X   Y
0  1  16
1  4   1
2  9  64

Applichiamo una funzione lambda lambda x: x**2 a tutti gli elementi di DataFrame utilizzando il metodo DataFrame.apply().

Le funzioni Lambda sono modi più semplici per definire funzioni in Python.

lambda x: x**2 rappresenta la funzione che accetta x come input e restituisce x**2 come output.

Codici di esempio: applica la funzione a ciascuna colonna con DataFrame.apply()

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(np.sum)
print("Modified DataFrame")
print(modified_df)

Produzione:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
X     6
Y    13
dtype: int64

Qui, np.sum viene applicato a ciascuna colonna perché axis=0 (valore predefinito) in questo caso.

Quindi, otteniamo la somma degli elementi in ogni colonna dopo aver usato il metodo df.apply().

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: (x**2)  if x.name == 'X' else x)
print(modified_df)

Produzione:

   X  Y
0  1  4
1  2  1
2  3  8
   X  Y
0  1  4
1  4  1
2  9  8

Se desideriamo applicare la funzione solo a determinate colonne, modifichiamo la nostra definizione di funzione utilizzando l’istruzione if per filtrare le colonne. Nell’esempio, la funzione modifica il valore delle sole colonne con il nome di colonna X.

Codici di esempio: applica la funzione a ciascuna riga con il metodo DataFrame.apply()

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(np.sum, axis=1)
print("Modified DataFrame")
print(modified_df)

Produzione:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
0     5
1     3
2    11
dtype: int64

Qui, np.sum viene applicato a ciascuna riga alla volta poiché in questo caso abbiamo impostato axis=1.

Quindi, otteniamo la somma dei singoli elementi di tutte le righe dopo aver utilizzato il metodo df.apply().

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: (x**2)  if x.name in [0,1] else x,
                     axis=1)
print(modified_df)

Produzione:

   X  Y
0  1  4
1  2  1
2  3  8
   X   Y
0  1  16
1  4   1
2  3   8

Se desideriamo applicare la funzione solo a determinate righe, modifichiamo la nostra definizione di funzione utilizzando l’istruzione if per filtrare le righe. Nell’esempio, la funzione modifica i valori solo delle righe con indice 0 e 1 cioè solo la prima e la seconda riga.

Codici di esempio: Metodo DataFrame.apply() con parametro result_type

Se usiamo il valore predefinito del parametro result_type cioè None, restituirà il DataFrame senza alcuna modifica.

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)

modified_df=df.apply(lambda x:[1,1],axis=1)
print("Modified DataFrame")
print(modified_df)

Produzione:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
0    [1, 1]
1    [1, 1]
2    [1, 1]
dtype: object

Nell’esempio precedente, ogni riga viene passata alla funzione alla volta e il valore della riga è impostato su [1,1].

Se desideriamo modificare il tipo di risultato dopo che la funzione opera su DataFrame, possiamo impostare i valori per result_type secondo le nostre esigenze.

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)

modified_df=df.apply(lambda x:[1,1],
                     axis=1,
                     result_type='expand')
print("Modified DataFrame")
print(modified_df)

Produzione:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
   0  1
0  1  1
1  1  1
2  1  1

L’impostazione di result_type='expand' espanderà tutti i valori simili a liste in colonne di un Dataframe.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Articolo correlato - Pandas DataFrame