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.

Error de Dash: ‘dash_core_components’ no tiene el atributo ‘send dataframe’.

En mi aplicación Dash tengo un callback que crea un objeto pd.to_dict, el cual es almacenado con dcc.Store, para que pueda ser utilizado en gráficas posteriores.

Estoy intentando crear un botón de descarga para descargar este dataframe creado.

Esta es parte de mi código (se han eliminado otras opciones de importación o diseño):

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State

app = dash.Dash(nombre)

app.layout = html.Div([
        html.H2('Ingrese una consulta de texto'),
        dcc.Store(id='memory'),
        html.Button('Enviar', id='button', n_clicks=0),
        html.Button("Descargar CSV", id="csv"),
        dcc.Download(id="download-df")])

@app.callback(
    Output('memory', 'data'),
    [Input('button', 'n_clicks')],
    [State('searchterm', 'value')])

def crear_df_func(n_clicks, searchterm):
    # algún código para crear el dataframe
        return df.to_dict(orient='records')

@app.callback(
    Output('download-df', 'data'),
    [Input('csv', 'n_clicks')],
    [State('memory', 'data')],
    prevent_initial_call=True
)
def descargar_csv(n_clicks, df):
    data = pd.DataFrame(df)
    return dcc.send_dataframe(data.to_csv, "mydf.csv")

if nombre == 'principal':
    app.run_server(debug=True)

Pero al ejecutar app.py, obtengo el error 'dash_core_components' no tiene el atributo 'send_dataframe', aunque sí lo tiene.

Tengo la versión 2.0.0 de Dash.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que hay un error tipográfico en tu función download_csv. El método para enviar data frames como un archivo es send_data_frame, no send dataframe. El código correcto para tu función download_csv es:

    def download_csv(n_clicks, df):
        data = pd.DataFrame(df)
        return dcc.send_data_frame(data.to_csv, "mydf.csv")
    

    Asegúrate también de haber importado pd (pandas) al comienzo de tu código:

    import pandas as pd
    

    Con estos cambios, el botón de descarga debería poder descargar correctamente tu data frame creado como un archivo CSV.

Comments are closed.