无法在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:长度必须匹配才能进行比较