我正在尝试设置一个简单的Dash应用程序,它从用作“查找表”的数据帧中返回一个值;这里包括一个示例测试表的屏幕截图
在应用程序中,用户可以输入许多状态中的一个(这是上表中的第一列),应用程序应该从该数据帧中存在状态的同一行中返回相应的两列条目。例如:如果用户选择了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)
你没有提到具体的错误,但我想我能看出问题所在。回调将输出(
Output
)到下拉组件的options
属性。听起来好像您想输出到其他东西,比如div
或p
组件。你有一个display-value
的ID,div
,所以也许这就是你想要它去的地方?尝试这样更改回叫:编辑:
一个问题来自于将索引设置为使用
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
。然后可以让其他回调从该表中提取值,而不是引用全局变量。在相关问题 更多 >
编程相关推荐