Dash中dcc.Dropdown传值报长度不匹配ValueError如何解决
问题原因
报错ValueError: ('Lengths must match to compare', (120,), (1,))由配置不匹配导致:
dcc.Dropdown设置了multi=False(单选模式),但初始value传入的是列表['01/01/2022'],不符合单选模式的传值要求- 后续回调中做数据筛选时,拿长度为120的
Date列和长度为1的列表做等值比较,维度不匹配直接触发报错
修复步骤
- 修正下拉框的初始值配置
单选模式下value直接传入目标字符串即可,不要用列表包裹,修正后的组件代码如下:date_category = list(df['Date'].unique()) app.layout = dbc.Container([ dbc.Row([ dcc.Dropdown( id='date_drdn', multi=False, value='01/01/2022', # 单选直接传单个值,去掉外层方括号 options=[{'label':x, 'value':x} for x in date_category] ) ]) ]) - 匹配对应的数据筛选逻辑
单选模式下回调拿到的下拉框返回值是单个字符串,直接做等值筛选即可,示例回调代码:@app.callback( Output('your_chart_id', 'figure'), # 替换成你实际的图表组件ID Input('date_drdn', 'value') ) def render_chart(selected_date): # 单选场景直接等值匹配筛选 filtered_data = df[df['Date'] == selected_date] # 补充你的绘图逻辑,例如用plotly.express生成图表 # fig = px.line(filtered_data, x='x_col', y='y_col') return fig
注意:如果后续需要开启多选模式,再将multi参数改为True,此时value需要传列表,筛选数据时改用df[df['Date'].isin(selected_date)]即可,不要混用单选、多选的传值和筛选逻辑。
内容的提问来源于stack exchange,提问作者beginofwork
相关产品推荐
相关产品推荐

