Dash应用程序实现过程中的回调错误问题

2024-03-28 11:50:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设置一个简单的Dash应用程序,它从用作“查找表”的数据帧中返回一个值;这里包括一个示例测试表的屏幕截图enter image description here

在应用程序中,用户可以输入许多状态中的一个(这是上表中的第一列),应用程序应该从该数据帧中存在状态的同一行中返回相应的两列条目。例如:如果用户选择了LA,应用程序应该返回“med”和“radio”

不幸的是,在用户选择之后我收到一个回拨错误。我的代码附在下面。有人能指导我解决这个问题吗?这是我第一次使用破折号-所以感谢任何指导!在

app = dash.Dash(__name__)
server = app.server

df=pd.read_csv("test_lookup_table.csv", delimiter=',', encoding="utf-8-sig")
df.set_index('state')

app.layout = html.Div([
    html.H1('On demand look up '),
    html.H3('Select from list of states below'),
    dcc.Dropdown(
        id='dropdown',
        options=[{'label': i, 'value': i} for i in df.state],
        value='LALA'
    ),
    html.Div(id='display-value')
])


@app.callback(
    Output('dropdown','options'),
    [Input('dropdown', 'value')])


def callback_a(i):
    return df.loc[i, 1:3]

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

Tags: csv数据用户nameapp应用程序dfserver
1条回答
网友
1楼 · 发布于 2024-03-28 11:50:03

你没有提到具体的错误,但我想我能看出问题所在。回调将输出(Output)到下拉组件的options属性。听起来好像您想输出到其他东西,比如divp组件。你有一个display-value的ID,div,所以也许这就是你想要它去的地方?尝试这样更改回叫:

@app.callback(
    Output('display-value', 'children'),
    [Input('dropdown', 'value')])
def callback_a(i):
    return df.loc[i, 1:3]

编辑:

一个问题来自于将索引设置为使用state列值。set_index返回一个值,但您尚未分配它,因此不会发生任何事情。在方法调用中使用df = df.set_index('state')或包含inplace=True标志。在

这导致了键错误,因为df没有状态值作为索引,因此您无法查找它们。现在您可以在回调中使用df.loc[i],它将能够找到正确的行。但是,您不能在这里使用[1:3],因为loc是按名称而不是行/列的值来引用的,而且您没有用整数命名的列。你可以做df.loc[i].tolist()[1:3]。但是,使用state作为索引,每行中只有两个值(索引0和索引1),因此:3]部分永远不会得到任何东西。你只会得到索引1的内容。在

最后,我应该在前面提到过,您已经将df设置为全局变量,这通常不是最佳实践。最好使用回调从CSV文件加载df,并将其添加到某个组件中,如dash_table.DataTable。然后可以让其他回调从该表中提取值,而不是引用全局变量。在

相关问题 更多 >