API · Pandas
Función Pandas DataFrame DataFrame.transform()
La función transform() del DataFrame de Pandas aplica una función pasada en un DataFrame y transforma el DataFrame.
En esta página
Python Pandas DataFrame.transform() aplica una función a un DataFrame y devuelve el resultado transformado. Es útil cuando quieres cambiar valores y mantener la longitud del eje seleccionado alineada con los datos originales. Elígelo para transformaciones elemento a elemento o por Series, en lugar de una reducción que resuma muchos valores en un único resultado.
Cómo funciona DataFrame.transform()
DataFrame.transform() pasa los datos a una función y reúne el resultado transformado. Con el valor predeterminado axis=0, la función se aplica a cada columna; axis=1 selecciona las filas. El resultado debe conservar la longitud del eje seleccionado, por lo que una función que cambie esa longitud es incompatible y pandas genera un ValueError. Esta restricción hace que transform sea útil cuando las operaciones posteriores dependen de que los valores sigan alineados con sus filas o columnas originales.
Por ejemplo, sumar una constante a cada valor modifica los datos sin cambiar su estructura. En cambio, un resumen como un total reduce varios valores a un resultado más pequeño. Ten presente esta diferencia al elegir una función y comprueba que su resultado se ajuste al eje seleccionado.
Sintaxis y parámetros de DataFrame.transform()
La firma del método es DataFrame.transform(func, axis=0, *args, **kwargs). func es la transformación que se va a aplicar. axis selecciona columnas (0 o "index") o filas (1 o "columns"). Los argumentos posicionales de *args y los argumentos con nombre de **kwargs se reenvían a la función, lo que resulta útil cuando una transformación necesita un valor configurable. Si la función utiliza sus propios valores predeterminados, omite esos argumentos adicionales.
El objeto devuelto contiene los datos transformados y está sujeto a la restricción de longitud del eje seleccionado. Si la función produce un resultado que no cumple esa restricción, se genera un error; eso no hace que un resumen más corto sea adecuado para transform. Usa una operación de reducción cuando quieras obtener un resumen.
Aplicar una función a un DataFrame
Una función invocable recibe cada Series seleccionada. En este ejemplo, sumar 2 cambia todos los valores y conserva las filas y columnas. Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
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 es una función invocable breve que devuelve una Series con la misma longitud que su entrada. Para reutilizar la lógica, define una función con nombre y pasa su nombre como func. También puedes pasar los argumentos que necesite esa función mediante *args o **kwargs. Los valores mostrados permiten comprobar fácilmente la operación aritmética y ver que ambas columnas conservan las posiciones de fila originales.
Aplicar varias funciones con DataFrame.transform()
Para aplicar varias transformaciones, pasa una lista de funciones, como frame.transform([normalize, standardize]), donde cada nombre corresponde a una función invocable disponible en el ámbito actual. Así se pide a pandas que aplique cada transformación proporcionada. Este patrón es útil cuando quieres obtener varias vistas derivadas de los mismos datos; elige funciones cuyos resultados cumplan el requisito de longitud del eje seleccionado. El resultado combinado exacto depende de las funciones y del comportamiento de pandas, así que inspecciona el objeto devuelto según tu caso de uso en lugar de dar por sentada una estructura de columnas concreta. Este patrón de llamada es ilustrativo; no se presenta como un ejemplo ejecutado.
DataFrame.transform() frente a DataFrame.apply()
Usa DataFrame.transform() cuando cada operación deba conservar la longitud del eje seleccionado y mantener los valores transformados alineados con la entrada. DataFrame.apply() admite más variación en la forma del resultado de una función, por lo que puede ser más adecuado cuando la operación devuelve un resumen o cambia de otro modo la forma del resultado. El comportamiento de ambos depende de la función y del eje; elige según el resultado que necesites, sin dar por sentado que uno de los métodos es siempre más rápido. Consulta DataFrame.apply() para conocer cómo se llama por separado.