Dash中的多选下拉菜单问题

时间:2019-07-30 09:52:21

标签: plotly-dash

无法在Dash上实现多重下拉功能。

数据集由不同国家和大洲的人口组成。 我正在尝试构建一个破折号应用程序,用户可以在其中提供多个输入,并且相应地,必须以不同的大陆过滤显示一个表。

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
from dash.dependencies import Input, Output

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
df = pd.read_excel("./GlobalPopulation.xls")
drop_options=df['Continent'].unique().tolist()
app.layout = html.Div([
html.Label('Multi-Select Dropdown'),
dcc.Dropdown(
    id='drop-down',
    options=[{'label':each, 'value':each}for each in drop_options],
    value=['Europe'],
    multi=True
    #searchable=True
),
html.Div(id='mytable')
])

@app.callback(
            Output(component_id='mytable',component_property='children'),
            [Input(component_id='drop-down',component_property='value')]
)
def ret_table(opt):
    filtered_df = df[df['Continent'] == opt]
    return generate_table(filtered_df)

def generate_table(dataframe,max_rows=5):
    html.Table(
                [html.Tr([html.Th(col) for col in filtered_df.columns])] 
+
                [html.Tr([
        html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
    ]) for i in range(min(len(dataframe),max_rows))]
    )


if __name__ == '__main__':
    app.run_server(debug=True)

预期输出::用输入中提到的任意大洲过滤的表。

实际输出::

  

回溯(最近通话最近):     调用中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”,第2463行       返回self.wsgi_app(环境,start_response)     wsgi_app中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”,行2449       响应= self.handle_exception(e)     1866行中的handle_exception中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”       加价(exc_type,exc_value,tb)     重新列出文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask_compat.py”,第39行       提高价值     wsgi_app中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”,第2446行       响应= self.full_dispatch_request()     1951行的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”,在full_dispatch_request中       rv = self.handle_user_exception(e)     在handle_user_exception中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”中,行1820       加价(exc_type,exc_value,tb)     重新列出文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask_compat.py”,第39行       提高价值     1949年,在full_dispatch_request中,文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”       rv = self.dispatch_request()     在dispatch_request中,文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py”,行1935       返回self.view_functionsrule.endpoint     调度中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ dash \ dash.py”,行1287       response.set_data(self.callback_map [output]'callback')     文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ dash \ dash.py”,行1171,在add_context中       output_value = func(* args,** kwargs)     ret_table中的文件“ C:\ Users \ admin \ Desktop \ RR Scripts \ Dash_Implementation.py”,第51行       filter_df = df [df ['Continent'] == opt]     包装中的文件“ C:\ Users \ admin \ Anaconda3 \ lib \ site-packages \ pandas \ core \ ops__init __。py”,行1207       引发ValueError(“长度必须匹配才能进行比较”)   ValueError:长度必须匹配才能进行比较

0 个答案:

没有答案