HOWTO · Pandas
Aplicar función a cada fila en Pandas DataFrame
Este tutorial demuestra cómo usar la función de aplicación de Pandas a cada fila en DataFrame y cómo aplicar diferentes funciones como un argumento, como usar las funciones lambda, numpy y definidas por el usuario en cada fila.
En esta página
Usa DataFrame.apply() con axis=1 para pasar cada fila a una función. Esta puede devolver una fila transformada, que apply() combina en un DataFrame. Esta guía explica cómo elegir el eje de las filas y muestra una función lambda, una función de NumPy y funciones definidas por el usuario, con y sin argumentos adicionales.
Sintaxis básica de la función apply() de Pandas
La forma general es dataframe.apply(function, axis=1, args=()). Define axis=1 cuando la función deba recibir filas. El valor predeterminado es axis=0, que pasa columnas. En una llamada por filas, la función recibe una Serie cuyo índice contiene las etiquetas de las columnas; el valor que devuelve determina el resultado. Si devuelve un valor escalar por fila, se obtiene una Serie; si devuelve una Serie con etiquetas coherentes, se obtiene un DataFrame.
args proporciona argumentos posicionales adicionales después de la fila. Úsalo cuando una función personalizada necesite un valor igual para todas las filas. Para consultar todos los parámetros, visita DataFrame.apply().
Aplicar una función lambda a cada fila de un DataFrame de Pandas
Una función lambda resulta útil para una transformación breve. Este ejemplo suma 10 a cada valor de la fila y devuelve un DataFrame con las mismas columnas. Si la lógica es más extensa, una función con nombre resulta más fácil de leer y reutilizar.
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
dataframe = pd.DataFrame([(1, 34, 23), (11, 31, 11)], columns=list("ABC"))
result = dataframe.apply(lambda row: row + 10, axis=1)
print(result)
A B C
0 11 44 33
1 21 41 21
El bloque de salida muestra el DataFrame transformado. La etiqueta visible de la salida se conserva en inglés.
Aplicar una función de NumPy a cada fila de un DataFrame de Pandas
Pasa directamente una función de NumPy cuando opere sobre cada valor de la fila. En este caso, np.sqrt transforma cada celda numérica y apply() reúne las filas transformadas. La raíz cuadrada es adecuada para valores numéricos no negativos; si los datos tienen otros tipos o requisitos específicos, elige otra operación.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import numpy as np
import pandas as pd
dataframe = pd.DataFrame([(4, 9, 16), (25, 36, 49)], columns=list("ABC"))
result = dataframe.apply(np.sqrt, axis=1)
print(result)
A B C
0 2.0 3.0 4.0
1 5.0 6.0 7.0
El bloque de salida muestra las filas transformadas con la raíz cuadrada. La etiqueta visible de la salida se conserva en inglés.
Aplicar una función definida por el usuario a cada fila de un DataFrame de Pandas con argumentos
Define la transformación de cada fila como una función cuando requiera más que una expresión breve. En el ejemplo, row es el primer argumento y 2 se proporciona después mediante args; la función duplica cada valor. args debe ser una tupla de argumentos posicionales, por lo que un único valor adicional se escribe como (2,).
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
def multiply_row(row, factor):
return row * factor
dataframe = pd.DataFrame([(2, 3, 4), (3, 5, 10)], columns=list("ABC"))
result = dataframe.apply(multiply_row, axis=1, args=(2,))
print(result)
A B C
0 4 6 8
1 6 10 20
El bloque de salida muestra el DataFrame con los valores de cada fila duplicados. La etiqueta visible de la salida se conserva en inglés.
Aplicar una función definida por el usuario a cada fila de un DataFrame de Pandas sin argumentos
Si la operación no necesita un parámetro compartido, define la función con solo el parámetro de la fila y pásala directamente. Este ejemplo multiplica por cuatro cada valor de cada fila. Las filas devueltas conservan sus etiquetas, así que el resultado es un DataFrame con las columnas originales.
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
def multiply_by_four(row):
return row * 4
dataframe = pd.DataFrame([(2, 3, 4), (3, 5, 10)], columns=list("ABC"))
result = dataframe.apply(multiply_by_four, axis=1)
print(result)
A B C
0 8 12 16
1 12 20 40
El bloque de salida muestra el DataFrame con los valores de cada fila multiplicados por cuatro. La etiqueta visible de la salida se conserva en inglés.
Usa apply() cuando la operación necesite una función que trabaje con una fila completa. Si la transformación consiste en una operación aritmética sencilla sobre columnas, una expresión vectorizada directa puede resultar más clara y evitar llamadas de Python para cada fila.