Python 如何根据短划线回调加载数据帧?

Python 如何根据短划线回调加载数据帧?,python,html,plotly-dash,Python,Html,Plotly Dash,我有以下功能将下拉选择与文件路径关联: def origin_func(): return html.Div( children=[ dcc.Markdown('Select country'),

我有以下功能将下拉选择与文件路径关联:

def origin_func():

return html.Div(                                                                  
    children=[                                                                    
        dcc.Markdown('Select country'),                              
        dcc.Dropdown(                                                             
            id='origin_div',                                                      
            options=[{'label': 'Malta', 'value': './data/malta.csv'}, {'label': 'Japan', 'value': './data/japan.csv'}],
            value='./data/malta.csv'                                   
        )                                                                         
    ]                                                                             
)
通过回调,我可以将此选择转换为数据帧:

@app.callback(                          
    Output('country_table', 'children'),
    Input('origin_div', 'value')        
)                                       
def countrytable(origin_div):           
    df = pd.read_csv(origin-div)        
    return df                           
问题是,如何将存储在Dash变量(“country_table”)中的Pandas数据帧传递到布局函数中,例如:

    def destination_func():
            children=[
                dcc.Markdown('Select country of destination'),
                dcc.Dropdown(
                    id='destination_div',
                    options=[{'label': i, 'value': i} for i in df['Destination'].drop_duplicates()],
                    value=df['Destination'].drop_duplicates()[0]
                )
            ]
        )

我认为主要有两种方法

  • countrytable
    回调函数的输出设置为您希望数据帧结束的位置

  • 将数据帧传递到其他对象中以保存它,并在以后需要时从该位置检索它

  • 看起来你在做第二个选择。您可以使用

    df.to_dict(orient='records')

    然后,当你以后需要它的时候,把它读回来,然后再做

    df=pandas.DataFrame.from_dict(dict_arg)

    dict
    中读取以转换为数据帧的函数将从第一个回调中获取
    输出
    ,作为
    输入
    状态
    参数

    编辑:

    您需要为第二个选项添加的回调如下所示:

    @app.callback(
    输出('which-component-in-your-layout'、'which-prop'),
    输入('country_table'、'children')
    )                                       
    def countrytable(存储的_df):
    df=pd.DataFrame.from_dict(存储的_df)
    返回df
    
    我认为有两种主要方法可以做到这一点

  • countrytable
    回调函数的输出设置为您希望数据帧结束的位置

  • 将数据帧传递到其他对象中以保存它,并在以后需要时从该位置检索它

  • 看起来你在做第二个选择。您可以使用

    df.to_dict(orient='records')

    然后,当你以后需要它的时候,把它读回来,然后再做

    df=pandas.DataFrame.from_dict(dict_arg)

    dict
    中读取以转换为数据帧的函数将从第一个回调中获取
    输出
    ,作为
    输入
    状态
    参数

    编辑:

    您需要为第二个选项添加的回调如下所示:

    @app.callback(
    输出('which-component-in-your-layout'、'which-prop'),
    输入('country_table'、'children')
    )                                       
    def countrytable(存储的_df):
    df=pd.DataFrame.from_dict(存储的_df)
    返回df
    
    Hi@coralvanda,由于2d方式不起作用——无论我把它放在“dict_arg”中,我都有以下错误:“NameError:name'dict_arg'未定义”——您将如何执行第一个选项?添加了一个示例。如果您仍然需要帮助,请告诉我。这对我不起作用,我有以下错误:“NameError:name'df'未定义”。我尝试做的想法是能够选择一个csv并通过Dash中的下拉列表将其作为数据帧加载。一个完整的、有效的、最简单的例子将是一个很大的帮助,因为我看到网络上有很多人在这个问题上苦苦挣扎,却没有找到解决方案。你能分享完整的回溯吗?通过尝试提供一个最简单的例子来指出我在这个问题上面临的问题,我想到了一个令人满意的解决方案。不幸的是,它带来了另一个问题,我制定了。嗨@coralvanda,因为2d方式不起作用——不管我把它放在‘dict_arg’中,我都有以下错误:“NameError:name‘dict_arg’没有定义”——你会如何做第一个选项?添加了一个示例。如果您仍然需要帮助,请告诉我。这对我不起作用,我有以下错误:“NameError:name'df'未定义”。我尝试做的想法是能够选择一个csv并通过Dash中的下拉列表将其作为数据帧加载。一个完整的、有效的、最简单的例子将是一个很大的帮助,因为我看到网络上有很多人在这个问题上苦苦挣扎,却没有找到解决方案。你能分享完整的回溯吗?通过尝试提供一个最简单的例子来指出我在这个问题上面临的问题,我想到了一个令人满意的解决方案。不幸的是,它带来了另一个问题,我制定。