首页 > 解决方案 > 为什么 Dash 回调函数不起作用

问题描述

我从我的 JuypterDash 应用程序中复制了一个代码片段,它可以正确执行,并带有两部分的注释# Output('filter-select-store', 'children'),#, filter_data.to_json(date_format='iso', orient='split'). 但是如果我包含这些部分以将数据保存到dcc.Store组件中,则回调函数将不再执行。任何想法为什么会发生这种情况以及如何将其保存DataFramedcc.Store组件?

谢谢!!


from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc
import json
import pandas as pd

sample= {'index': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'columns': ['row_id', 'subject_id', 'hadm_id', 'admittime', 'dischtime', 'deathtime', 'admission_type', 'admission_location', 'discharge_location', 'insurance', 'language', 'religion', 'marital_status', 'ethnicity', 'edregtime', 'edouttime', 'diagnosis', 'hospital_expire_flag', 'has_chartevents_data'], 'data': [[12258, 10006, 142345, '2164-10-23 21:09:00', '2164-11-01 17:15:00', 'No Value', 'EMERGENCY', 'EMERGENCY ROOM ADMIT', 'HOME HEALTH CARE', 'Medicare', 'No Value', 'CATHOLIC', 'SEPARATED', 'BLACK/AFRICAN AMERICAN', '2164-10-23 16:43:00', '2164-10-23 23:00:00', 'SEPSIS', 0, 1], [12263, 10011, 105331, '2126-08-14 22:32:00', '2126-08-28 18:59:00', '2126-08-28 18:59:00', 'EMERGENCY', 'TRANSFER FROM HOSP/EXTRAM', 'DEAD/EXPIRED', 'Private', 'No Value', 'CATHOLIC', 'SINGLE', 'UNKNOWN/NOT SPECIFIED', 'No Value', 'No Value', 'HEPATITIS B', 1, 1], [12265, 10013, 165520, '2125-10-04 23:36:00', '2125-10-07 15:13:00', '2125-10-07 15:13:00', 'EMERGENCY', 'TRANSFER FROM HOSP/EXTRAM', 'DEAD/EXPIRED', 'Medicare', 'No Value', 'CATHOLIC', 'No Value', 'UNKNOWN/NOT SPECIFIED', 'No Value', 'No Value', 'SEPSIS', 1, 1], [12269, 10017, 199207, '2149-05-26 17:19:00', '2149-06-03 18:42:00', 'No Value', 'EMERGENCY', 'EMERGENCY ROOM ADMIT', 'SNF', 'Medicare', 'No Value', 'CATHOLIC', 'DIVORCED', 'WHITE', '2149-05-26 12:08:00', '2149-05-26 19:45:00', 'HUMERAL FRACTURE', 0, 1], [12270, 10019, 177759, '2163-05-14 20:43:00', '2163-05-15 12:00:00', '2163-05-15 12:00:00', 'EMERGENCY', 'TRANSFER FROM HOSP/EXTRAM', 'DEAD/EXPIRED', 'Medicare', 'No Value', 'CATHOLIC', 'DIVORCED', 'WHITE', 'No Value', 'No Value', 'ALCOHOLIC HEPATITIS', 1, 1], [12277, 10026, 103770, '2195-05-17 07:39:00', '2195-05-24 11:45:00', 'No Value', 'EMERGENCY', 'EMERGENCY ROOM ADMIT', 'REHAB/DISTINCT PART HOSP', 'Medicare', 'No Value', 'OTHER', 'No Value', 'WHITE', '2195-05-17 01:49:00', '2195-05-17 08:29:00', 'STROKE/TIA', 0, 1], [12278, 10027, 199395, '2190-07-13 07:15:00', '2190-07-25 14:00:00', 'No Value', 'ELECTIVE', 'PHYS REFERRAL/NORMAL DELI', 'SNF', 'Medicare', 'No Value', 'CATHOLIC', 'MARRIED', 'WHITE', 'No Value', 'No Value', ' MITRAL REGURGITATION;CORONARY ARTERY DISEASE\\CORONARY ARTERY BYPASS GRAFT WITH MVR  ? MITRAL VALVE REPLACEMENT /SDA', 0, 1], [12280, 10029, 132349, '2139-09-22 10:58:00', '2139-10-02 14:29:00', 'No Value', 'EMERGENCY', 'EMERGENCY ROOM ADMIT', 'SNF', 'Medicare', 'No Value', 'PROTESTANT QUAKER', 'DIVORCED', 'WHITE', '2139-09-22 06:03:00', '2139-09-22 11:50:00', 'SYNCOPE;TELEMETRY', 0, 1], [12282, 10032, 140372, '2138-04-02 19:52:00', '2138-04-15 14:35:00', 'No Value', 'EMERGENCY', 'EMERGENCY ROOM ADMIT', 'REHAB/DISTINCT PART HOSP', 'Medicare', 'No Value', 'CATHOLIC', 'WIDOWED', 'WHITE', '2138-04-02 14:56:00', '2138-04-02 20:40:00', 'RIGHT HUMEROUS FRACTURE', 0, 1], [12283, 10033, 157235, '2132-12-05 02:46:00', '2132-12-08 15:15:00', 'No Value', 'EMERGENCY', 'EMERGENCY ROOM ADMIT', 'SNF', 'Medicare', 'POLI', 'CATHOLIC', 'MARRIED', 'WHITE', '2132-12-04 20:11:00', '2132-12-05 04:05:00', 'RENAL FAILIURE-SYNCOPE-HYPERKALEMIA', 0, 1]]}

df = pd.DataFrame(index=sample['index'], columns=sample['columns'], data=sample['data'])
viz_element_selection_dict = df.columns


app = JupyterDash(__name__,external_stylesheets=[dbc.themes.BOOTSTRAP])

dcc.Store(id='filter-select-store', data={})
controls = dbc.Card(
    [
        dbc.FormGroup(
            [
                dbc.Label("Element"),
                dcc.Dropdown(
                    id="filter-element",
                    options=[
                            {"label": col, "value": col} for col in viz_element_selection_dict
                        ],
                        value = viz_element_selection_dict[0],
                ),
            ]
        ),
        dbc.FormGroup(
            [
                dbc.Label("Values"),
                dcc.Dropdown(
                    id="filter-value",
                    multi=True,
                ),
            ]
        ),
    ],
    body=True,
)

app.layout = dbc.Container(
    [
        dbc.Row(
            [
                dbc.Col(controls, md=5),
            ],
            align="center",
        ),
    ],
    fluid=True,
)

@app.callback(
    Output('filter-value', 'options'),# Output('filter-select-store', 'children'),
    [Input('filter-element', 'value')]
)
def update_filter_value_dropdown(column):
    print('update filter')

   
    if column is None:
        column = next(iter(df[column]))
        
    
    
    filter_data = df[['subject_id', column]]
    return [{'label': i, 'value': i} for i in sorted(filter_data[filter_data.columns[1]].fillna('No Value').unique())]#, filter_data.to_json(date_format='iso', orient='split')
    
app.run_server(mode='inline',host="localhost",port=1021)

标签: pythonjupyterdash

解决方案


推荐阅读