gpt4 book ai didi

python - 如何返回由 2 个下拉列表更新的数据表作为 Plotly Python 中的输入

转载 作者:行者123 更新时间:2023-12-04 14:15:41 25 4
gpt4 key购买 nike

如标题所示,我正在创建一个仅包含数据表的绘图仪表板。将有 2 个下拉列表作为输入,数据表将根据下拉列表更新。如何设置布局和回调?

import pandas as pd
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_table as dt
from dash.dependencies import Input, Output, State

df = pd.read_csv(data, header=0, encoding = 'utf8')

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

dropdown = html.Div([html.Label('district'),
dcc.Dropdown(id='dropdown_d',
options=[{'label': i, 'value': i} for i in df["district"].unique()], value='none'),
html.Label('address'),
dcc.Dropdown(id='dropdown_a',
options=[{'label': i, 'value': i} for i in df["address"].unique()], value='none')])

final_table = html.Div([dash_table.DataTable(id="final_table")])

app.layout = html.Div([dropdown, final_table])

@app.callback(Output('final_table', 'data'),
[Input('dropdown_d', 'value'),
])

def update_table(selected_value):
df = pd.read_csv(data, header=0, encoding = 'utf8')
df_updated = df[df["district"] == selected_value]
columns = [{'name': i, 'id': i} for i in df_updated.columns]
data = df.to_dict('records')
return columns, data

if __name__ == "__main__":
app.run_server(debug=True, port=8055)

这是我能到达的最远的地方。上面的代码只是尝试从 1 个下拉值更新数据表,但我的目标是更新 2 个下拉值。

很感谢任何形式的帮助。
如果需要数据文件,这里是 data 的链接.

最佳答案

这是工作代码的片段,我添加了注释以供澄清,

import pandas as pd
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_table as dt
from dash.dependencies import Input, Output, State

df = pd.read_csv("https://elartedm.com/wp-content/uploads/2020/03/data_hk.csv", header=0, encoding = 'utf8')

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

dropdown = html.Div([
html.Label('district'),
dcc.Dropdown(id='dropdown_d1', options=[{'label': i, 'value': i} for i in df["District"].unique()], value=None),
html.Label('address'),
dcc.Dropdown(id='dropdown_d2', options=[], value=None)
])


#its better to have a Div here so that you can update the entire div in the callback and add the necessary properties in the callback
final_table = html.Div(id="final_table")

app.layout = html.Div([dropdown, final_table])


#callback to update second dropdown based on first dropdown
#This callback is used to update the second dropdown based on the value selected in the first dropdown so that its dynamically updated (this is a good practice rather than having a static list of options).
@app.callback(Output('dropdown_d2', 'options'),
[
Input('dropdown_d1', 'value'),
])
def update_dropdown_2(d1):
print(d1)
if(d1 != None):
df_filtered = df[(df["District"]==d1)]
return [{'label': i, 'value': i} for i in df_filtered["Address"].unique()]
else:
return []


#this callback to update the final table should be based on both the input dropdown values, so the input parameters are two dropdown_d1, dropdown_d2
#based on these values filter the dataframe and update the table
#since dataframe is a global declaration you don't need to again consume it here.
@app.callback(Output('final_table', 'children'),
[
Input('dropdown_d1', 'value'),
Input('dropdown_d2', 'value'),
])
def update_table(d1, d2):

if(d1 != None and d2 != None):
df_filtered = df[(df["District"]==d1) & (df["Address"]==d2)]

return [dt.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in df_filtered.columns],
data=df_filtered.to_dict('records'),
)]
else:
print("none")
return []


if __name__ == "__main__":
app.run_server(debug=True, port=8055)

希望能帮助到你。

关于python - 如何返回由 2 个下拉列表更新的数据表作为 Plotly Python 中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60556896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com