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.

¿Puedo evitar un ValueError al concatenar dataframes vacíos?

Tengo df = pd.concat(dict_of_df, axis=0) y a veces [raramente] puede suceder que todos los df en el diccionario estén vacíos, en cuyo caso me gustaría que Pandas devuelva alegremente un dataframe vacío. Pero en su lugar obtengo un ValueError.

Puedo escribir un bucle para verificar la longitud de cada df antes de llamar a concat, pero preferiría no hacerlo siempre, así que en este momento simplemente incluyo el concat en un bloque try/except… lo cual no me hace realmente feliz porque si hubiera un ValueError “verdadero” me gustaría saberlo. Entonces podría hacer un bucle try/except y si se produce una excepción, contar todos los diccionarios y… uf. Esto se está volviendo loco.

¿Hay algo más limpio? Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una opción es utilizar una declaración condicional para comprobar si alguno de los DataFrames en el diccionario está vacío antes de llamar a la función concat. Esto se puede hacer utilizando una comprensión de listas para recorrer las claves del diccionario y comprobar la longitud de cada DataFrame.

    if not all(len(df) == 0 for df in dict_of_df.values()):
        df = pd.concat(dict_of_df, axis=0)
    else:
        df = pd.DataFrame()
    

    Este código verifica si todos los DataFrames en el diccionario tienen una longitud de cero y, de no ser así, realiza la función de concatenación. De lo contrario, devuelve un DataFrame vacío.

    Alternativamente, también podrías utilizar la función empty de pandas para comprobar si un DataFrame está vacío o no.

    if not all(df.empty for df in dict_of_df.values()):
        df = pd.concat(dict_of_df, axis=0)
    else:
        df = pd.DataFrame()
    

    Este código utiliza la función empty para verificar si algún DataFrame en el diccionario está vacío. De no ser así, realiza la función de concatenación. De lo contrario, devuelve un DataFrame vacío.

    Cualquiera de estas opciones debería proporcionar una solución más limpia y eficiente que utilizar un bucle try/except o un bucle para comprobar la longitud de cada DataFrame.

Comments are closed.