Respuesta corta: El método apply() de Pandas aplica una función, propia o lambda, a cada elemento de una Serie o a cada fila o columna de un DataFrame. Por ejemplo, df["Nombre"].apply(lambda x: x.capitalize()) transforma una columna y df.apply(funcion, axis=1) recorre las filas. Con axis=0, el valor por defecto, la función se aplica a cada columna.
El método apply() es uno de los métodos más versátiles y útiles de la librería Pandas (si te interesa aprender Pandas desde cero, te dejamos este tutorial de pandas para machine learning). Este método te permite pasar una función y aplicarla a cada elemento de una Serie o a las filas o columnas de un DataFrame. En el siguiente ejemplo, veremos cómo utilizarlo para realizar un cambio dentro de una columna en un DataFrame de usuarios.
import pandas as pd
users_df = pd.DataFrame({
"Nombre": ["JOHN", "MARY", "PETER", "JANE"],
"Apellido": ["smith", "johnson", "davis", "brown"],
"Edad": [25, 30, 35, 40],
"Email": ["john@gmail.com", "mary@hotmail.com", "peter@yahoo.com", "jane@example.com"]
})
def capitalize(nombre):
name_capitalized = nombre.lower().capitalize()
return name_capitalized
users_df["Nombre"] = users_df["Nombre"].apply(capitalize)
users_df["Apellido"] = users_df["Apellido"].apply(lambda apellido: apellido.capitalize())
print(users_df)output del código:
Nombre Apellido Edad Email
0 John Smith 25 john@gmail.com
1 Mary Johnson 30 mary@hotmail.com
2 Peter Davis 35 peter@yahoo.com
3 Jane Brown 40 jane@example.comEn este ejemplo, hacemos uso de el método apply() para modificar las columnas Nombre y Apellido y hacer que solo la primera letra sea mayúscula, este método puede recibir una función o una lambda (función anónima) como parámetro, en este ejemplo de código usamos una función para modificar los nombres de los usuarios y una función lambda para modificar los apellidos, la elección de cual función debes usar depende de tus preferencias y la cantidad de cambios que deseas hacer en la columna ya que una función lambda se declara en una sola línea de código y puede ser confuso hacer demasiados cambios en una función de este tipo.
¿Qué es el método apply() y cómo funciona?
El método apply() de Pandas es un método de propósito general que se puede utilizar para aplicar una función a cada elemento de una serie o cada fila o columna de un marco de datos (DataFrame). En el caso de las series, el método apply() recibe una función como parámetro y la aplica a cada elemento de la serie, la función puede ser una función personalizada o una función de NumPy o Pandas.
En el caso de los DataFrame, el método apply() recibe una función como parámetro y la aplica a cada fila o columna del marco de datos, según el valor del parámetro axis; por defecto (axis=0) se aplica a cada columna. Este método es una herramienta muy versátil que puede utilizarse para realizar una gran variedad de tareas de procesamiento de datos tanto en la ciencia de datos (data science) como en el aprendizaje automático (machine learning).
Parámetros del método apply() de Pandas
El método apply() recibe varios parámetros, a continuación veremos cuales son y cómo funcionan.
data_frame.apply(
funcion_modificadora,
axis = 0,
raw = False,
result_type = None,
args = ("parámetros", "extra"),
by_row = "compat",
**kwargs
)- funcion_modificadora: función que se aplica a cada una de las columnas o filas en la
SerieoDataFrame. - axis: Eje a lo largo del cual se aplica la función, esta variable recibe dos valores (0 o 'index', 1 o 'columns') y por defecto tiene el valor de 0.
- 0 o 'index': aplica la función a cada columna.
- 1 o 'columns': aplica la función a cada fila.
- raw: este parámetro controla cómo se pasan a la función las filas o columnas del
DataFrame, este parámetro recibe un valor booleano que por defecto es False.- True: pasa cada fila o columna a la función como un array de NumPy (
ndarray). - False: pasa cada fila o columna a la función como una
Serie.
- True: pasa cada fila o columna a la función como un array de NumPy (
- result_type: este parámetro solo actúa cuando
axis=1 (columns)y puede recibir cuatro valores (‘expand’, ‘reduce’, ‘broadcast’, None) por defecto su valor es None.- ‘expand’: los resultados en forma de lista se convertirán en columnas.
- ‘reduce’: devuelve una Serie si es posible en lugar de expandir los resultados en forma de lista. Este valor es lo contrario de 'expand'.
- ‘broadcast’: los resultados se emitirán con la forma original del
DataFrame, se conservarán los índices y las columnas originales.
- args: argumentos posicionales de tipo tuple para pasar a la función además de la
SerieoDataFrame. - by_row: solo tiene efecto cuando se pasa una lista o un diccionario de funciones. Con
False, a cada función se le pasa la Serie completa de una vez; con'compat'(valor por defecto) se mantiene el comportamiento compatible con versiones anteriores. **kwargs: argumentos para pasar como argumentos de palabra clave a la función. Estos se utilizan cuando la función necesita argumentos adicionales además de los valores de laSerieoDataFrame.
Ejemplos de uso del método apply() de Pandas
El método apply() de Pandas tiene bastantes usos para el procesamiento de datos tanto en data science como en machine learning, a continuación veremos algunos ejemplos básicos haciendo uso de este método.
Combinar dos columnas de un Dataframe en una sola
Uno de los usos más comunes para el método apply() es el de acceder a las filas de un DataFrame y combinarlas o modificarlas, como se muestra en el siguiente ejemplo.
import pandas as pd
users_df = pd.DataFrame({
"Nombre": ["John", "Mary", "Peter", "Jane"],
"Apellido": ["Smith", "Johnson", "Davis", "Brown"],
"Edad": [25, 30, 35, 40],
"Email": ["john@gmail.com", "mary@hotmail.com", "peter@yahoo.com", "jane@example.com"]
})
def crear_nombre_completo(fila):
return fila["Nombre"] + " " + fila["Apellido"]
users_df["Nombre Completo"] = users_df.apply(crear_nombre_completo, axis=1)
print(users_df)output:
Nombre Apellido Edad Email Nombre Completo
0 John Smith 25 john@gmail.com John Smith
1 Mary Johnson 30 mary@hotmail.com Mary Johnson
2 Peter Davis 35 peter@yahoo.com Peter Davis
3 Jane Brown 40 jane@example.com Jane BrownEn este ejemplo, hacemos uso del método apply() para acceder a las columnas Nombre y Apellido de cada fila y combinarlas en una sola que llamaremos Nombre Completo, para este ejemplo debemos pasar el parámetro axis=1 de esta forma le decimos a la función que debe fijarse en las filas del DataFrame y no en las columnas, luego creamos una nueva columna para guardar el resultado del método apply(), para crear la nueva columna usamos la sintaxis users_df["Nombre Completo"].
Modificar una columna en un Dataframe
Otro uso bastante común del método apply() es arreglar o modificar una columna en un DataFrame, como se muestra en el siguiente ejemplo.
import pandas as pd
import re
users_df = pd.DataFrame({
"Nombre": ["John", "mary", "PETER", "JAne"],
"Apellido": ["Smith", "Johnson", "Davis", "Brown"],
"Edad": [25, 30, 35, 40],
"Telefono": ["123-456-7890", "0987654321", "123 098 4567", "147_258_3690"]
})
def modificar_numero(numero):
num = re.sub(r'[^0-9]', '', numero)
return f"{num[0:3]}-{num[3:6]}-{num[6:]}"
def modificar_nombre(nombre):
return nombre.lower().capitalize()
users_df["Nombre"] = users_df["Nombre"].apply(modificar_nombre)
users_df["Telefono"] = users_df["Telefono"].apply(modificar_numero)
print(users_df)output:
Nombre Apellido Edad Telefono
0 John Smith 25 123-456-7890
1 Mary Johnson 30 098-765-4321
2 Peter Davis 35 123-098-4567
3 Jane Brown 40 147-258-3690En este ejemplo hacemos uso del método apply() para modificar dos columnas en el Dataframe users_df, la columna Nombre y la columna Telefono, como puedes ver en el ejemplo la columna Nombre tiene varias inconsistencias de ortografía, para arreglar esto pasamos todos los nombres a minúscula y luego pasamos la primera letra de cada nombre a mayúscula así tendremos una estructura más concisa para el nombre de los usuarios. Por otro lado la columna Telefono no sigue un único patrón específico sino que cada número tiene su propia sintaxis, para solucionar esto, hacemos uso de una expresión regular para eliminar cualquier carácter del número telefónico que no sea un número y luego le asignamos una única sintaxis a todos los números telefónicos.
Modificar los valores de una Serie
El método apply() también es bastante útil para modificar los datos de una Serie de Pandas, a continuación veremos un pequeño ejemplo.
import pandas as pd
numeros_serie = pd.Series([1, 2, 3, 4, 5])
def elevar_al_cuadrado(num):
return num ** 2
def factorial(num):
if num == 0:
return 1
else:
return num * factorial(num - 1)
cuadrados = numeros_serie.apply(elevar_al_cuadrado)
factoriales = numeros_serie.apply(factorial)
print(cuadrados)
print(factoriales)output:
0 1 --> Cuadrado del número 1
1 4 --> Cuadrado del número 2
2 9 --> Cuadrado del número 3
3 16 --> Cuadrado del número 4
4 25 --> Cuadrado del número 5
dtype: int64
0 1 --> Factorial del número 1
1 2 --> Factorial del número 2
2 6 --> Factorial del número 3
3 24 --> Factorial del número 4
4 120 --> Factorial del número 5
dtype: int64En este ejemplo, aplicamos el método apply() a cada uno de los elementos de la Serie numeros_serie, primero le pasamos la función elevar_al_cuadrado() para encontrar el número cuadrado de todos los elementos, luego también le pasamos la función factorial() para encontrar el número factorial de cada uno de los elementos de la Serie y por último imprimimos el resultado en la consola. Este es solo un pequeño ejemplo, el método apply() puede usarse de muchas otras maneras para trabajar con datos en Series o Dataframes.
Conclusión
El método apply() de Pandas es esencial en el análisis y la manipulación de datos, ya que permite aplicar funciones personalizadas a cada uno de los elementos de una Serie o Dataframe. En este artículo vimos algunos ejemplos sobre cómo hacer uso de este método para manipular los elementos de estas estructuras y modificarlos, recuerda que estos son solo algunos ejemplos básicos, puedes hacer muchas cosas más con ayuda de este método. Te invito a que sigas aprendiendo y practicando con el método apply() ya que te ayudará bastante en tu carrera como desarrollador Python.
Esperamos que hayas disfrutado de este artículo y que encuentres la información útil. Te invitamos a explorar otros recursos en nuestro blog para ampliar tus habilidades con Pandas y el análisis de datos. Si deseas llevar tu aprendizaje al siguiente nivel, te animamos a registrarte de forma totalmente gratuita en 4Geeks.com.
¡Diviértete aprendiendo! 😉
El método apply() te permite transformar datos en Pandas con funciones propias de forma muy flexible. Para seguir avanzando con una ruta guiada, un curso de programación estructurado combina proyectos de datos con el apoyo de mentores.
