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.
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
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.
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.
MultiIndexPara 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)],
)
SparseDataFrame y SparseSeries son deprecadasFinalmente, 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])}) 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)
Imagina que tienes una lista con datos de un usuario: usuario_original = { 'nombre': 'Juan',…
Has aplicado un t-test y obtienes p = 0,003. El resultado es estadísticamente significativo, hay…
Hay un bug que aparece una y otra vez en código Python, tan sutil que…
Durante décadas, cuando escribías una dirección web y pulsabas Intro, tu navegador hacía algo que…
La independencia financiera es el punto en el que tus inversiones generan suficientes rendimientos para…
Tienes dos grupos de datos y quieres saber si son estadísticamente distintos. O tienes una…
This website uses cookies.