Funzione Pandas DataFrame DataFrame.apply()
- 
          
            Sintassi di pandas.DataFrame.apply():
- 
          
            Codici di esempio: metodo DataFrame.apply()
- 
          
            Codici di esempio: applica la funzione a ciascuna colonna con DataFrame.apply()
- 
          
            Codici di esempio: applica la funzione a ciascuna riga con il metodo DataFrame.apply()
- 
          
            Codici di esempio: Metodo DataFrame.apply()con parametroresult_type
 
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 lacolonna(axis = 1) | 
| raw | Booleano. Riga / colonna passata come oggetto Series(raw=False) o oggettondarray(raw=True) | 
| result_type | { 'expand','reduce','broadcast','None'}  tipo di output dell’operazione applicabile solo peraxis=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.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn