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

Curiosidad: La Paradoja de Simpson, o por qué no siempre debes fiarte de los promedios

En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…

23 horas ago

Copias de seguridad automáticas en SQL Server con rotación de archivos

Las bases de datos son el corazón de casi cualquier sistema de información moderno. Ya…

3 días ago

Curiosidad: La Ley de Twyman y la trampa de los datos “interesantes”

En ciencia de datos, pocas cosas llaman más la atención de los científicos de datos…

1 semana ago

Cómo calcular el tamaño de la muestra para encuestas

Calcular adecuadamente el tamaño de la muestra es una parte esencial en el diseño de…

1 semana ago

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

Hoy en día, cuando pensamos en ciencia de datos, lo primero que nos viene a…

2 semanas ago

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

Ampliar el espacio de almacenamiento en un sistema Linux es una tarea habitual y crítica…

2 semanas ago

This website uses cookies.