我的問題是,數據總共位于四個數據幀中,并且我的應用程序中的三個頁面中的每一頁都使用其中多個數據幀來可視化內容。我試圖避免每次調用其中一個頁面時都重新加載數據幀。這可能嗎?如何?目前,我嘗試首先使用 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
提交
取消