Search code examples
pythonplotlydashboard

only list-like objects are allowed to be passed to isin(), you passed a [str]


I am trying to create dashboard by using the plotly python. Require to create dropdown for date selection for the pie chart. All the data are come from a .csv file.

Expectation: The data displayed in the pie chart are based on the date selected.

Data:
enter image description here

Code:

date_category = list(df['Date'].unique())

app.layout = ...,

        dcc.Dropdown(id='date_drdn', multi=False, value= ['02/01/2022'], 
                      options = [{'label':x, 'value':x} 
                                for x in date_category]
                      ),
                     
        dcc.Graph(id='pie-fig', figure={})

@app.callback(  
      Output('pie-fig', 'figure'),
      Input('date_drdn', 'value'))


def update_graph(selection):
 
      dff = df[df['Date'].isin(selection)]      
      fig = px.pie(dff, values='Transactions', names='Product', color_discrete_sequence=px.colors.sequential.RdBu)
      fig.update_traces(textinfo= "label+value+percent").update_layout(title_x=0.5)
      return fig     

However, it keep on showing the error message when select the date.
Error message:"only list-like objects are allowed to be passed to isin(), you passed a [str]"

And the data is not display based on the date selected.

Does anyone know why and how to solve it?


Solution

  • If the return value of the dropdown allows multiple selections, it will be in list format and isin effect. Since the expected pie chart is a single selection of date and time, the list format is not needed as an initial value. At the same time, the return value of the callback will be a single date and time data for conditional extraction.

    date_category = list(df['Date'].unique())
    
    from dash import Dash, dcc, html, Input, Output
    import plotly.express as px
    #from jupyter_dash import JupyterDash
    
    app = Dash(__name__)
    #app = JupyterDash(__name__)
    
    app.layout = html.Div([
        html.H3('Daily Graph'),
        dcc.Dropdown(id='date_drdn',
                     multi=False,
                     value= '02/01/2022',
                     options = [{'label':x, 'value':x} for x in date_category]
                    ),
                         
            dcc.Graph(id='pie-fig', figure={})
    ])
    
    @app.callback(  
         Output('pie-fig', 'figure'),
         Input('date_drdn', 'value'))
    def update_graph(selection):
        # if selection:
        dff = df[df['Date'] == selection]
        #print(dff)
        fig = px.pie(dff, values='Transactions', names='Product', color_discrete_sequence=px.colors.sequential.RdBu)
        fig.update_traces(textinfo="label+value+percent").update_layout(title_x=0.5)
        return fig
    
    if __name__ == '__main__':
        app.run_server(debug=True)#, mode='inline'
    

    enter image description here