DASH-获取数据帧(DF)外部函数 [英] DASH - get dataframe (df) outside function

查看:0
本文介绍了DASH-获取数据帧(DF)外部函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对我的代码有一个问题。 我想要补充的是,我上传了一个*.db文件,该文件被放在一个数据帧中。 在那之后,我想对数据帧做一些事情,但我无法在函数之外获得df!

在第一个函数(Def Parse_Content)中,使用查询生成数据帧(Df)。 如果我在其中放置一个打印(Df),我会看到该df填充了来自数据库文件的信息。

然后我返回df(返回df),但我不能在函数外部返回df! 如果我将一个print(Df)放在函数之外,我得到错误"NameError:没有定义名称‘df’"

是否有人可以在其他函数中帮助从df获取信息? 全局函数不适用于破折号,但找不到解决方案。

谢谢

import dash_html_components as html
import dash_core_components as dcc
import dash
import sqlite3
import plotly
import dash_table as dte
from dash.dependencies import Input, Output, State
import pandas as pd



app = dash.Dash()

app.scripts.config.serve_locally = True
app.config['suppress_callback_exceptions'] = True

app.layout = html.Div([

    html.H5("Upload Files"),
    dcc.Upload(
        id='upload-data',
        children=html.Div([
            'Drag and Drop or ',
            html.A('Select Files')
        ]),
        style={
            'width': '100%',
            'height': '60px',
            'lineHeight': '60px',
            'borderWidth': '1px',
            'borderStyle': 'dashed',
            'borderRadius': '5px',
            'textAlign': 'center',
            'margin': '10px'
        },
        multiple=False),
    html.Br(),
    html.Button(
        id='propagate-button',
        n_clicks=0,
        children='Propagate Table Data'
    ),


    html.Br(),
    html.H5("Filter Column"),
    dcc.Dropdown(id='dropdown_table_filterColumn',
        multi = False,
        placeholder='Filter Column'),


    html.Br(),
    html.H5("Updated Table"),
    html.Div(dte.DataTable(data=[{}], id='table'))


])



def parse_contents(contents, filename):

    try:
        if 'db' in filename:

            conn = sqlite3.connect(filename)
            df = pd.read_sql('SELECT Date, Triage FROM Database', con=conn)
            print(df)
    except Exception as e:
        print(e)
        return None

    return df



@app.callback(Output('table', 'data'),
              [Input('upload-data', 'contents'),
               Input('upload-data', 'filename')])
def update_output(contents, filename):
    if contents is not None:
        df = parse_contents(contents, filename)
        if df is not None:
            return df.to_dict('records')
        else:
            return [{}]
    else:
        return [{}]






app.css.append_css({
    "external_url": "https://codepen.io/chriddyp/pen/bWLwgP.css"
})

if __name__ == '__main__':
    app.run_server(debug=True)

推荐答案

我个人喜欢为此使用类,但您可以使用字典或其他可变数据结构。

其基本思想是使用您的函数可以访问的范围内的初始值来初始化某种类型的可变数据结构。然后,在应用程序生命周期的稍后时间点,我们可以更改数据。

class DbResult:
    def __init__(self, data=None):
        self.data = data

    def store(self, data):
        self.data = data


db_result = DbResult() 

>>> db_result.data
None

# db_result.data is None here because data wasn't passed to the constructor
# and we gave data an initial value of None

这允许我们在parse_contents函数内调用db_result.store(data=df)

设置后,我们可以使用db_result.data在另一个函数中获取数据。

这篇关于DASH-获取数据帧(DF)外部函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆