API · Pandas

Funzione Pandas DataFrame DataFrame.transform()

La funzione Pandas DataFrame transform() applica una funzione passata su un DataFrame e trasforma il DataFrame.

In questa pagina

Python Pandas DataFrame.transform() applica una funzione a un DataFrame e restituisce il risultato trasformato. È utile quando si vogliono modificare i valori mantenendo la lunghezza dell’asse selezionato allineata ai dati originali. Si usa per trasformazioni elemento per elemento o di tipo Series, anziché per riduzioni che riassumono più valori in un unico risultato.

Come funziona DataFrame.transform()

DataFrame.transform() passa i dati a una funzione e raccoglie il risultato trasformato. Con il valore predefinito axis=0, la funzione viene applicata a ogni colonna; axis=1 seleziona le righe. Il risultato deve mantenere la lunghezza dell’asse selezionato: se una funzione la modifica, è incompatibile e pandas solleva un ValueError. Questo vincolo rende transform utile quando le operazioni successive richiedono che i valori restino allineati alle righe o alle colonne originali.

Per esempio, aggiungere una costante a ogni valore modifica i dati senza cambiarne la struttura. Un riepilogo, come un totale, è diverso: riduce più valori a un risultato più piccolo. Tieni presente questa distinzione quando scegli una funzione e verifica che il risultato sia compatibile con l’asse selezionato.

Sintassi e parametri di DataFrame.transform()

La firma del metodo è DataFrame.transform(func, axis=0, *args, **kwargs). func è la trasformazione da applicare. axis seleziona le colonne (0 o "index") oppure le righe (1 o "columns"). Gli argomenti posizionali in *args e quelli con nome in **kwargs vengono passati alla funzione; questo è utile quando la trasformazione richiede un valore configurabile. Se la funzione usa i propri valori predefiniti, puoi omettere questi argomenti aggiuntivi.

L’oggetto restituito contiene i dati trasformati e deve rispettare il vincolo sulla lunghezza dell’asse selezionato. Se il risultato della funzione non può rispettare tale vincolo, viene sollevato un errore: un riepilogo più breve non è adatto a transform. Se vuoi ottenere un riepilogo, usa un’operazione di riduzione.

Applicare una funzione a un DataFrame

Una funzione richiamabile riceve ogni Series selezionata. In questo esempio, aggiungere 2 modifica ogni valore mantenendo righe e colonne. Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import pandas as pd

frame = pd.DataFrame({"sales": [10, 20], "cost": [2, 5]})
adjusted = frame.transform(lambda column: column + 2)
print(adjusted.to_dict(orient="list"))
{'sales': [12, 22], 'cost': [4, 7]}

La lambda è una piccola funzione richiamabile che restituisce una Series della stessa lunghezza dell’input. Per riutilizzare la logica, definisci una funzione con nome e passane il nome come func. Puoi anche passare alla funzione gli argomenti richiesti tramite *args o **kwargs. I valori mostrati permettono di verificare facilmente il calcolo e di vedere che entrambe le colonne mantengono le posizioni originali delle righe.

Applicare più funzioni con DataFrame.transform()

Per applicare più trasformazioni, passa un elenco di funzioni, ad esempio frame.transform([normalize, standardize]), dove ogni nome indica una funzione richiamabile disponibile nell’ambito corrente. Con questo schema pandas applica ciascuna trasformazione fornita. È utile quando vuoi ottenere più rappresentazioni derivate degli stessi dati; scegli funzioni i cui risultati rispettino il vincolo sulla lunghezza dell’asse selezionato. Il risultato combinato preciso dipende dalle funzioni e dal comportamento di pandas: esamina quindi l’oggetto restituito in base al tuo caso d’uso, senza presumere una particolare disposizione delle colonne. Questo schema di chiamata è illustrativo e non viene presentato come un esempio eseguito.

DataFrame.transform() e DataFrame.apply() a confronto

Usa DataFrame.transform() quando ogni operazione deve mantenere la lunghezza dell’asse selezionato e allineare i valori trasformati all’input. DataFrame.apply() è più flessibile rispetto alla forma del risultato di una funzione e può essere più adatto quando l’operazione restituisce un riepilogo o modifica in altro modo la forma del risultato. Il comportamento di entrambi dipende dalla funzione e dall’asse: scegli in base al risultato necessario, senza presumere che un metodo sia sempre più veloce. Per i dettagli sulle chiamate, consulta DataFrame.apply().