es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Boxplot para groupby de tupla arroja VisibleDeprecationWarning: Creando un ndarray a partir de secuencias anidadas irregulares.

Tengo una serie de tiempo con un valor de ‘parámetro’ entre otras columnas. Me gustaría hacer un gráfico de cajas de esto por año Y mes. El DataFrame es un registro y la columna ‘datestamp_col’ no es única y no se puede utilizar como índice (algunos ejemplos en línea utilizan un FechaHora única como índice con una sintaxis más simple).

Esto funciona perfectamente (se crean los gráficos de cajas) separadamente con groupby generando:

df[flt][['parámetro']].groupby(by=[df['datestamp_col'].dt.year]).groups:
{2014.0: [72, 92, 94,

Funciona bien con el gráfico de cajas (agrupación por mes o año individualmente):

df[flt][['parámetro']].groupby(by=[df['datestamp_col'].dt.year]).boxplot(
                            subplots=False, 
                            column='parámetro', ...

Los intentos de obtener una imagen más detallada con gráficos de caja para meses Y años parecen generar grupos correctos:

df[flt][['parámetro']].groupby(by=[df[flt]['datestamp_col'].dt.year, df[flt]['datestamp_col'].dt.month]).groups

{(2014, 9): [45, 72, 88, 92, - Valores de septiembre de 2014 para generar el gráfico de cajas

Sin embargo, los intentos de crear un gráfico de cajas para cada mes de cada año resultan en un error:

VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.

La pregunta es dónde / cómo especifico ‘dtype=object’ en mi sintaxis para obtener algunos gráficos de cajas adicionales que deseo, o más técnico, ¡convertir el índice a una cadena/objeto dentro de groupby!
Gracias.

PD: flt: es otro filtro y se usa la lista o [[‘parámetro’]] solo como un legado para poder agregar más columnas.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para especificar ‘dtype=object’ en la sintaxis y obtener los gráficos de caja deseados, puedes convertir el índice a una cadena/objeto dentro de la función groupby. Esto se puede hacer agregando el método “.astype(str)” a la declaración groupby:

    df[flt][['parameter']].groupby(by=[df[flt]['datestamp_col'].dt.year.astype(str), df[flt]['datestamp_col'].dt.month.astype(str)]).boxplot(
                                subplots=False, 
                                column='parameter', ...
    

    Esto convertirá los valores de año y mes a cadenas, lo cual evitará el error de “secuencias anidadas irregulares”.

Comments are closed.