Pandas práctico(5): Mapping, apply y applymap

En este artículo, aprenderemos sobre mapeo y las funciones apply y applymap.

Esta técnica te ayudará a manipular tus datos de formas muy convenientes, y es otra adición importante a tu caja de herramientas.

Como siempre, exploraremos el tema con ejemplos que te ayudarán a entender qué está pasando.

¡Perfecto, comencemos!

Mapeo

Mapeo significa aplicar una función que transforma los elementos de un dominio en los elementos de otro dominio. En este caso, las entradas, filas y columnas en una serie o dataframe. Pandas te permite aplicar funciones a nivel de elemento, fila y columna para crear nuevas series y dataframes.

Pandas también es compatible con muchas de las operaciones definidas en NumPy. Esto te permite aplicar funciones de una manera muy conveniente y eficiente. Veamos algunos ejemplos:

import numpy as np
import pandas as pd

frame = pd.DataFrame(np.random.randn(4,5),
                     columns=list('abcde'),
                     index=['one', 'two', 'three', 'four'])
frame
a b c d e
one 3.007277 0.388730 0.113406 2.119481 -0.975847
two 0.636278 0.206911 1.778134 -1.663180 -1.211043
three 0.946199 -0.397836 -0.127306 -0.588036 1.026060
four -0.315198 -0.496803 -0.918301 0.389656 -1.515556
# Puedes aplicar funciones de NumPy directamente en dataframes.
# Puedes, por ejemplo, calcular el valor absoluto de cada entrada
np.abs(frame)
a b c d e
one 3.007277 0.388730 0.113406 2.119481 0.975847
two 0.636278 0.206911 1.778134 1.663180 1.211043
three 0.946199 0.397836 0.127306 0.588036 1.026060
four 0.315198 0.496803 0.918301 0.389656 1.515556
# También puedes calcular la 3ra potencia de cada entrada
np.power(frame, 3)
a b c d e
one 27.196948 0.058741 0.001459 9.521129 -0.929277
two 0.257597 0.008858 5.622036 -4.600633 -1.776145
three 0.847125 -0.062967 -0.002063 -0.203335 1.080236
four -0.031315 -0.122617 -0.774382 0.059162 -3.481093

Puedes aplicar muchas de las ufuncs de NumPy a las estructuras de datos de Pandas, en la mayoría de situaciones proporcionan un resultado con las mismas dimensiones de la estructura original.

Otra operación importante (y bastante común) crea una nueva estructura después de aplicar una operación a cada fila o columna en el dataframe original. Veamos cómo crear una nueva estructura cuyas entradas son el resultado de sumar cada columna/fila de nuestro frame:

# El apply de Pandas ejecuta una función a lo largo de un eje.
# El comportamiento por defecto es ejecutarlo usando el eje de filas (aplicar la operación en cada columna)

# Produzcamos una Serie donde cada entrada es la suma de los valores en cada columna:

ser = frame.apply(np.sum)
ser
a    4.274556
b   -0.298998
c    0.845934
d    0.257921
e   -2.676385
dtype: float64
# Si quieres realizar la operación usando columnas como eje (la operación se aplicará por fila)
# Puedes pasar el argumento opcional axis

ser = frame.apply(np.sum, axis='columns')
ser
one      4.653047
two     -0.252900
three    0.859082
four    -2.856201
dtype: float64

De nuevo, puedes usar la mayoría de las ufuncs de NumPy como argumento para la función apply, pero no termina ahí: Puedes definir tus propias funciones y usarlas con applymap. El siguiente ejemplo aplica una función que suma 2 a cada entrada:

def sum_two(entry):
    return entry + 2

frame.applymap(sum_two)
a b c d e
one 5.007277 2.388730 2.113406 4.119481 1.024153
two 2.636278 2.206911 3.778134 0.336820 0.788957
three 2.946199 1.602164 1.872694 1.411964 3.026060
four 1.684802 1.503197 1.081699 2.389656 0.484444
# Puedes hacer esto usando lambdas, usualmente es más fácil de leer:

sum_three = lambda x: x+3

frame.apply(sum_three)
a b c d e
one 6.007277 3.388730 3.113406 5.119481 2.024153
two 3.636278 3.206911 4.778134 1.336820 1.788957
three 3.946199 2.602164 2.872694 2.411964 4.026060
four 2.684802 2.503197 2.081699 3.389656 1.484444

Concepto simple, aplicaciones infinitas

Realizar mapeos te permite hacer casi cualquier cosa que necesites con tus datos. Cualquier cosa, desde agregaciones estadísticas hasta herramientas avanzadas de aprendizaje automático se construyen sobre esta base.

Como habrás notado, el concepto es muy simple, pero saber cómo aplicar funciones de NumPy a estructuras de datos de Pandas te ayudará en el día a día. ¡Esto es aún más obvio cuando empiezas a explorar el potencial de aplicar tus propias funciones!

En el próximo artículo, aprenderemos sobre resumir datos y estadísticas descriptivas.

¡Gracias por leer!

Qué hacer después

Juan Luis Orozco Villalobos

¡Hola! Soy Juan, ingeniero de software y consultor en Budapest. Me especializo en computación en la nube e IA, y me encanta ayudar a otros a aprender sobre tecnología e ingeniería