Python 在plot.ly-Dash隐藏Div中存储熊猫数据帧字典?

Python 在plot.ly-Dash隐藏Div中存储熊猫数据帧字典?,python,pandas,plotly,plotly-dash,Python,Pandas,Plotly,Plotly Dash,我试图找出如何将调用API得到的数据存储在隐藏的div中。所有数据都需要一次加载,但返回的对象数量将发生变化,因此我正在使用JSONIED数据帧填充字典,并将键作为下拉列表,希望将其存储在隐藏的div中,并让用户选择要显示的数据 我已经将其用于单个数据帧-但似乎无法使其用于字典-服务器将启动,但当我转到地址时,我将收到“错误加载布局”消息,并且控制台中会显示“加载资源失败:服务器响应状态为500(内部服务器错误)” 下面是一个示例,我试图填充一个范围滑块,其中data_dict是JSONIED数

我试图找出如何将调用API得到的数据存储在隐藏的div中。所有数据都需要一次加载,但返回的对象数量将发生变化,因此我正在使用JSONIED数据帧填充字典,并将键作为下拉列表,希望将其存储在隐藏的div中,并让用户选择要显示的数据

我已经将其用于单个数据帧-但似乎无法使其用于字典-服务器将启动,但当我转到地址时,我将收到“错误加载布局”消息,并且控制台中会显示“加载资源失败:服务器响应状态为500(内部服务器错误)”

下面是一个示例,我试图填充一个范围滑块,其中data_dict是JSONIED数据帧的字典

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)
bundle.js:2错误:component.type未定义
在s(bundle.js:14)
在Array.map()处
在s(bundle.js:14)
在Array.map()处
在s(bundle.js:14)
在e.value(bundle.js:14)
在p.(u rendervalidatedcomponent without-ownerorcontext)(react dom.min.js:13)
在p._renderValidatedComponent(react dom.min.js:13)
在PerformitialMount(react dom.min.js:13)
在p.mountComponent(react dom.min.js:13)
找到了答案

事实证明,在JSONIfDataFrames之后,您必须拥有json.dump(data_dict)整个dict

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)
然后,您可以使用json.loads()重新加载它们,然后对数据帧进行反JSONIfy处理。

解决了这个问题

事实证明,在JSONIfDataFrames之后,您必须拥有json.dump(data_dict)整个dict

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)
然后,您可以使用json.loads()重新加载它们,然后对数据帧进行反JSonify