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)
No te olvides valorar esta entrada
Suscríbete a nuestro boletín
Suscríbete al boletín semanal para estar al día de todas las publicaciones de Analytics Lane.