Escrito por:
El método apply()
es uno de los métodos más versátiles y útiles de la librería de Pandas (Si te interesa aprender Pandas desde cero, te dejamos este tutorial de pandas para machine), este método te permite pasar una función y aplicarla en una columna específica dentro de un Dataframe o una Serie. En el siguiente ejemplo, veremos cómo utilizar esta función para realizar un cambio dentro de una columna en un Dataframe de usuarios.
1import pandas as pd 2 3users_df = pd.DataFrame({ 4 "Nombre": ["JOHN", "MARY", "PETER", "JANE"], 5 "Apellido": ["smith", "johnson", "davis", "brown"], 6 "Edad": [25, 30, 35, 40], 7 "Email": ["john@gmail.com", "mary@hotmail.com", "peter@yahoo.com", "jane@example.com"] 8}) 9 10def capitalize(nombre): 11 name_capitalized = nombre.lower().capitalize() 12 return name_capitalized 13 14users_df["Nombre"] = users_df["Nombre"].apply(capitalize) 15users_df["Apellido"] = users_df["Apellido"].apply(lambda apellido: apellido.capitalize()) 16 17print(users_df)
output del código:
1 Nombre Apellido Edad Email 20 John Smith 25 john@gmail.com 31 Mary Johnson 30 mary@hotmail.com 42 Peter Davis 35 peter@yahoo.com 53 Jane Brown 40 jane@example.com
En 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) cómo 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 e una función de este tipo.
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 la series, el método apply()
recibe una función cómo 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 cómo parámetro y la aplica a cada fila o columna del marco de datos, según el valor del parámetro axis
que por defecto se aplica a las filas. 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).
El método apply()
recibe varios parámetros, a continuación veremos cuales son y cómo funcionan.
1data_frame["columna"].apply( 2 funcion_modificadora, 3 axis = 0, 4 raw = False, 5 result_type = None, 6 args = ("parámetros", "extra"), 7 by_row = "compat", 8 **kwargs 9)
Serie
o DataFrame
.Serie
o DataFrame
, está parámetro recibe un valor booleano que por defecto es False.
axis=1 (columns)
y puede recibir cuatro valores (‘expand’, ‘reduce’, ‘broadcast’, None) por defecto su valor es None.
DataFrame
, se conservarán los índices y las columnas originales.Serie
o DataFrame
.Series
o cómo un objeto ndarray
.Serie
o DataFrame
.El método apply()
de Pandas tiene bastantes usos para el procesamiento de datos tanto en data science cómo en machine learning, a continuación veremos algunos ejemplos básicos haciendo uso de este método.
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, cómo se muestra en el siguiente ejemplo.
1import pandas as pd 2 3users_df = pd.DataFrame({ 4 "Nombre": ["John", "Mary", "Peter", "Jane"], 5 "Apellido": ["Smith", "Johnson", "Davis", "Brown"], 6 "Edad": [25, 30, 35, 40], 7 "Email": ["john@gmail.com", "mary@hotmail.com", "peter@yahoo.com", "jane@example.com"] 8}) 9 10def crear_nombre_completo(fila): 11 return fila["Nombre"] + " " + fila["Apellido"] 12 13users_df["Nombre Completo"] = users_df.apply(crear_nombre_completo, axis=1) 14print(users_df)
output:
1 Nombre Apellido Edad Email Nombre Completo 20 John Smith 25 john@gmail.com John Smith 31 Mary Johnson 30 mary@hotmail.com Mary Johnson 42 Peter Davis 35 peter@yahoo.com Peter Davis 53 Jane Brown 40 jane@example.com Jane Brown
En este ejemplo, hacemos uso del método apply()
para acceder las filas Nombre
y Apellido
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"]
.
Otro uso bastante común del método apply()
es arreglar o modificar una columna en un DataFrame, cómo se muestra en el siguiente ejemplo.
1import pandas as pd 2import re 3 4users_df = pd.DataFrame({ 5 "Nombre": ["John", "mary", "PETER", "JAne"], 6 "Apellido": ["Smith", "Johnson", "Davis", "Brown"], 7 "Edad": [25, 30, 35, 40], 8 "Telefono": ["123-456-7890", "0987654321", "123 098 4567", "147_258_3690"] 9}) 10 11def modificar_numero(numero): 12 num = re.sub(r'[^0-9]', '', numero) 13 return f"{num[0:3]}-{num[3:6]}-{num[6:]}" 14 15def modificar_nombre(nombre): 16 return nombre.lower().capitalize() 17 18users_df["Nombre"] = users_df["Nombre"].apply(modificar_nombre) 19users_df["Telefono"] = users_df["Telefono"].apply(modificar_numero) 20 21print(users_df)
output:
1 Nombre Apellido Edad Telefono 20 John Smith 25 123-456-7890 31 Mary Johnson 30 098-765-4321 42 Peter Davis 35 123-098-4567 53 Jane Brown 40 147-258-3690
En este ejemplo hacemos uso del método apply()
para modificar dos columnas en el Dataframe users_df
, la columna Nombre
y la columna Telefono
, cómo 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.
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.
1import pandas as pd 2numeros_serie = pd.Series([1, 2, 3, 4, 5]) 3 4def elevar_al_cuadrado(num): 5 return num ** 2 6 7def factorial(num): 8 if num == 0: 9 return 1 10 else: 11 return num * factorial(num - 1) 12 13cuadrados = numeros_serie.apply(elevar_al_cuadrado) 14factoriales = numeros_serie.apply(factorial) 15 16print(cuadrados) 17print(factoriales)
output:
10 1 --> Cuadrado del número 1 21 4 --> Cuadrado del número 2 32 9 --> Cuadrado del número 3 43 16 --> Cuadrado del número 4 54 25 --> Cuadrado del número 5 6dtype: int64 7 80 1 --> Factorial del número 1 91 2 --> Factorial del número 2 102 6 --> Factorial del número 3 113 24 --> Factorial del número 4 124 120 --> Factorial del número 5 13dtype: int64
En 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.
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 cómo 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! 😉