Python

Novedades en pandas 0.25

El pasado 18 de julio de 2019 ha sido publicada la versión 0.25 de pandas. En esta entrada vamos a ver algunas de las novedades que trae esta versión.

Actualización de pandas a la versión 0.25

Antes de ver las novedades de pandas 0.25 es necesario comprobar que tenemos esta versión instalada en nuestro sistema. Para ellos se puede ejecutar el Python las siguientes líneas de código para obtener la versión.

import pandas as pd

pd.__version__

Si esta no es 0.25 o posterior se puede actualizar mediante conda escribiendo la siguiente línea en el terminal y siguiendo las instrucciones que aparecen en pantalla.

conda update pandas

Alternativamente también es posible actualizar la versión de pandas con pip. Lo que se puede hacer escribiendo la siguiente línea en la terminal.

pip install pandas==0.25

Novedades en pandas 0.25

Agregación por nombre

Una de las características mas llamativas de pandas 0.25 es la agregación por nombre (“named aggregation”) del groupby(). Lo que permite realizar múltiples operaciones sobre un DataFrame y asignar un nombre a las columnas del objeto resultante. Por ejemplo, en el caso de tener un listado de facturas se puede calcular cual es el máximo y el mínimo de unidades de productos en cada una. Lo que se obtiene mediante el siguiente código.

invoices = {'invoice': [1, 2, 3, 4, 5, 6],
            'client': [2, 1, 3, 1, 2, 3],
            'units': [3, 2, 2, 3, 1, 1],
            'price': [27.76, 21.13, 29.82, 29.96, 21.11, 23.97],
            'total': [83.28, 42.26, 29.82, 59.92, 21.11, 23.97]}
invoices = pd.DataFrame(invoices)

invoices.groupby('client').agg(
    minimum_units = pd.NamedAgg(column='units', aggfunc='min'),
    maximum_units = pd.NamedAgg(column='units', aggfunc='max'))
        minimum_units  maximum_units
client                              
1                   2              3
2                   1              3
3                   1              2

En esta ocasión se realiza una agrupación de los datos por cliente. Obteniéndose para cada uno de clientes el valor mínimo de unidades y el valor máximo de todas sus facturas. Para ello, en primer lugar, se indica la columna de agregación y posteriormente las columnas y la operación que se realiza sobre ellas.

Dado que esta funcionalidad va a ser habitual se puede reemplazar el método pd.NamedAgg() por una tupla con la columna y la función. Permitiendo escribir la operación de una forma más compacta.

invoices.groupby('client').agg(
    minimum_units = pd.NamedAgg(column='units', aggfunc='min'),
    maximum_units = pd.NamedAgg(column='units', aggfunc='max'))

Obteniéndose así el mismo resultado que anteriormente.

Conversión de listas en columnas con explode()

Otra nueva funcionalidad de pandas 0.25 es la posibilidad de transformar las listas de las columnas de un DataFrame en columnas. Una funcionalidad a la que se accede mediante el método explode(). Por ejemplo, si se dispone de un DataFrame con los identificadores de los clientes en una columna y en otra una lista con los identificadores de las facturas se puede crear un nuevo DataFrame con un registro por cada una de las facturas. Así, si se crea el DataFrame

df = [{'invoices': [1, 2, 3], 'client' : 1},
      {'invoices': [4, 6], 'client' : 2}]
df = pd.DataFrame(df) 
    invoices  client
0  [1, 2, 3]       1
1     [4, 6]       2

Es posible transformar las listas en registros mediante el método explode().

df.explode('invoices')
  invoices  client
0        1       1
0        2       1
0        3       1
1        4       2
1        6       2

Algo que se complemente bien con lo la expansión de listas de valores publicado anteriormente.

Mejora en la visualización de la estructura de datos MultiIndex

Para aquellos que usamos la estructura de datos MultiIndex la visualización de los datos no era precisamente intuitiva. Mostrando todos los niveles y códigos mezclados. En pandas 0.25 la visualización se mejora considerablemente al imprimir cada fila como una tupla, pudiendo así visualizar mejor las columnas.

df = pd.MultiIndex.from_product([['client', 'data'], range(3)])
MultiIndex([('client', 0),
            ('client', 1),
            ('client', 2),
            (  'data', 0),
            (  'data', 1),
            (  'data', 2)],
           )

Las clases SparseDataFrame y SparseSeries son deprecadas

Finalmente, en pandas 0.25 también se han deprecado SparseDataFrame y SparseSeries. Por lo que al utilizar estos métodos se obtendrán mensajes de advertencia. En la nueva versión los valores dispersos se pueden indicar directamente en el método DataFrame(). Así para crear una matriz dispersa se tiene que modificar

pd.SparseDataFrame({"data": [0, 1]})

por

pd.DataFrame({"data": pd.SparseArray([0, 1])})

Conclusiones

En esta entrada se han visto algunas de las novedades disponibles en pandas 0.25. Las cuales son importante conocer, especialmente aquellas que han sido deprecadas para modificarlas correctamente.

Imágenes: Pixabay (Nick115)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Pandas

Recent Posts

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

4 horas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 días ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

1 semana ago

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

1 semana ago

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

2 semanas ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

2 semanas ago

This website uses cookies.