为了账号安全,请及时绑定邮箱和手机立即绑定

Dash:跨页面具有相同数据的多页面应用程序

Dash:跨页面具有相同数据的多页面应用程序

喵喵时光机 2023-08-08 16:51:33
我的问题是,数据总共位于四个数据帧中,并且我的应用程序中的三个页面中的每一页都使用其中多个数据帧来可视化内容。我试图避免每次调用其中一个页面时都重新加载数据帧。这可能吗?如何?目前,我尝试首先使用 index.py 中的函数加载 df,然后加载其他页面:df_fz, df_md, df_auf, df_mat = get_dfs()from apps import app1, app2, app3[...]@app.callback(Output('page-content', 'children'),              [Input('url', 'pathname')])def display_page(pathname):    if pathname == '/app1':        return app1.layout    elif pathname == '/app2':        return app2.layout    else:        return app3.layoutapp1 到 app3 中的每一个都使用数据帧,就好像它们是在脚本顶部加载的一样,但此代码按原样抛出错误,因为 df 未定义。app3 的一个最小示例:layout = html.Div([    html.H3('App 3'),    dcc.Dropdown(        id='app-3-dropdown',        options=[            {'label': 'App 3 - {}'.format(i), 'value': i} for i in [df_fz.Value]        ]    ),    html.Div(id='app-3-display-value'),])@app.callback(    Output('app-3-display-value', 'children'),    [Input('app-3-dropdown', 'value')])def display_value(value):    return 'You have selected "{}" but in App 3'.format(value)
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

看起来您需要做的就是创建一个模块,其中包含可以在不同文件之间共享的数据。

data.py

import pandas as pd
df1 = pd.DataFrame()

app1.py

from data import df1

app2.py

from data import df1

模块变量是全局变量,因此所有文件都将共享相同的 df1,并且由于它是导入,因此它将在 app、app1 等中的其余代码之前运行。

您还可以在开头保留 id='app-3-dropdown', options=[] ,然后创建选项列表作为 'app-3-dropdown' 的回调。

您可以将数据帧存储在 dcc.Store(id='df-data', data=df.to_dict()) 中,并且可以用作其他回调的输入或状态。


查看完整回答
反对 回复 2023-08-08
?
富国沪深

TA贡献1790条经验 获得超9个赞

尝试将数据帧放入数据集文件夹中,并将它们连接到每个应用程序页面中。像这样的东西:

PATH = pathlib.Path(__file__).parent
DATA_PATH = PATH.joinpath("../datasets").resolve()
df = pd.read_csv(DATA_PATH.joinpath("mydata.csv"))


查看完整回答
反对 回复 2023-08-08
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

以下文件结构-

- app.py
- index.py
- apps
   |-- __init__.py
   |-- app1.py
   |-- app2.py

尝试这种读取“app.py”文件中的数据帧的方法。由于每个“app1.py”、“app2.py”、“app3.py”都使用这些数据帧,因此请在这些文件中导入 df,即在“app1.py”代码中:

from app import app
from app import df_fz, df_md, df_auf, df_mat

对于其他文件也是如此。


查看完整回答
反对 回复 2023-08-08
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信