我的问题是,数据总共位于四个数据帧中,并且我的应用程序中的三个页面中的每一页都使用其中多个数据帧来可视化内容。我试图避免每次调用其中一个页面时都重新加载数据帧。这可能吗?如何?目前,我尝试首先使用 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()) 中,并且可以用作其他回调的输入或状态。
富国沪深
TA贡献1790条经验 获得超9个赞
尝试将数据帧放入数据集文件夹中,并将它们连接到每个应用程序页面中。像这样的东西:
PATH = pathlib.Path(__file__).parent DATA_PATH = PATH.joinpath("../datasets").resolve() df = pd.read_csv(DATA_PATH.joinpath("mydata.csv"))
慕工程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
对于其他文件也是如此。
添加回答
举报
0/150
提交
取消