将 pandas 数据帧的字典存储在 plot.ly-Dash 隐藏 Div 中?
Storing Dictionary of pandas dataframes in plot.ly-Dash hidden Div?
我正在尝试弄清楚如何存储通过在隐藏的 Divs 中调用 API 获得的数据。所有数据都需要一次加载,但返回的对象数量会发生变化,所以我用 Jsoniefied 数据框填充字典,将键作为下拉列表,并希望将其存储在隐藏的 div, 并让用户选择要显示的数据。
我已经让它与单个数据框一起工作 - 但似乎无法让它与字典一起工作 - 服务器将启动,但当我访问地址时我会收到“错误加载布局”消息,并且“无法加载资源:服务器响应状态为 500(内部服务器错误)”在控制台中。
下面是我尝试填充范围滑块的示例,其中 data_dict 是 jsoniefied 数据帧的字典。
from helper_functions import data_dict
keys = list(data_dict.keys())
df = data_dict[keys[0]]
app = dash.Dash()
app.layout = html.Div(
children = [
html.Div([
html.Div(id = 'date_selector'),
]),
html.Div(
id = 'data',
children = [data_dict],
style = {'display': 'none'}
)
]
)
@app.callback(
dd.Output('date_selector', 'children'),
[dd.Input('data','children')]
)
def update_date_range_slider(data):
df = data[keys[0]]
times = pd.date_range(start= df.index.min().date(), end= df.index.max().date() + datetime.timedelta(days=1)).tolist()
marksdict = {}
for t in times:
marksdict[int(time.mktime(t.timetuple()))] = time.strftime('%d %b %Y')
slider = dcc.RangeSlider(
min = min(list(marksdict.keys())),
max = max(list(marksdict.keys())),
marks = marksdict,
values = [min(list(marksdict.keys())), max(list(marksdict.keys()))]
)
return slider
if __name__ == '__main__':
app.run_server(debug=True)
如有任何帮助,我们将不胜感激。
谢谢
更新:
找到更详细的错误信息:
bundle.js:2 Error: component.type is undefined
at s (bundle.js:14)
at Array.map (<anonymous>)
at s (bundle.js:14)
at Array.map (<anonymous>)
at s (bundle.js:14)
at e.value (bundle.js:14)
at p._renderValidatedComponentWithoutOwnerOrContext (react-dom.min.js:13)
at p._renderValidatedComponent (react-dom.min.js:13)
at performInitialMount (react-dom.min.js:13)
at p.mountComponent (react-dom.min.js:13)
想通了。
事实证明,在对数据帧进行 jsonifying 之后,你必须拥有 json.dumps(data_dict) 整个字典。
然后您可以使用 json.loads() 重新加载它们,然后对数据帧进行 dejsonify。
我正在尝试弄清楚如何存储通过在隐藏的 Divs 中调用 API 获得的数据。所有数据都需要一次加载,但返回的对象数量会发生变化,所以我用 Jsoniefied 数据框填充字典,将键作为下拉列表,并希望将其存储在隐藏的 div, 并让用户选择要显示的数据。
我已经让它与单个数据框一起工作 - 但似乎无法让它与字典一起工作 - 服务器将启动,但当我访问地址时我会收到“错误加载布局”消息,并且“无法加载资源:服务器响应状态为 500(内部服务器错误)”在控制台中。
下面是我尝试填充范围滑块的示例,其中 data_dict 是 jsoniefied 数据帧的字典。
from helper_functions import data_dict
keys = list(data_dict.keys())
df = data_dict[keys[0]]
app = dash.Dash()
app.layout = html.Div(
children = [
html.Div([
html.Div(id = 'date_selector'),
]),
html.Div(
id = 'data',
children = [data_dict],
style = {'display': 'none'}
)
]
)
@app.callback(
dd.Output('date_selector', 'children'),
[dd.Input('data','children')]
)
def update_date_range_slider(data):
df = data[keys[0]]
times = pd.date_range(start= df.index.min().date(), end= df.index.max().date() + datetime.timedelta(days=1)).tolist()
marksdict = {}
for t in times:
marksdict[int(time.mktime(t.timetuple()))] = time.strftime('%d %b %Y')
slider = dcc.RangeSlider(
min = min(list(marksdict.keys())),
max = max(list(marksdict.keys())),
marks = marksdict,
values = [min(list(marksdict.keys())), max(list(marksdict.keys()))]
)
return slider
if __name__ == '__main__':
app.run_server(debug=True)
如有任何帮助,我们将不胜感激。
谢谢
更新:
找到更详细的错误信息:
bundle.js:2 Error: component.type is undefined
at s (bundle.js:14)
at Array.map (<anonymous>)
at s (bundle.js:14)
at Array.map (<anonymous>)
at s (bundle.js:14)
at e.value (bundle.js:14)
at p._renderValidatedComponentWithoutOwnerOrContext (react-dom.min.js:13)
at p._renderValidatedComponent (react-dom.min.js:13)
at performInitialMount (react-dom.min.js:13)
at p.mountComponent (react-dom.min.js:13)
想通了。
事实证明,在对数据帧进行 jsonifying 之后,你必须拥有 json.dumps(data_dict) 整个字典。
然后您可以使用 json.loads() 重新加载它们,然后对数据帧进行 dejsonify。