Назначение функций для удаления утопленных элементов в Python Dash - PullRequest
0 голосов
/ 06 ноября 2018

Я создал панель инструментов для отображения данных в формате CSV. Однако я не уверен, как назначить отдельные функции для относительных выпадающих опций. Ниже приведен код:

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
from dash.dependencies import Input, Output

import plotly.figure_factory as ff
import plotly.graph_objs as go

df1 = pd.read_csv('ReturnsData - returns_summary.csv.csv')
df2 = pd.read_csv('ReturnsData - NonReturn_guideid_counts.csv.csv')
df3 = pd.read_csv('ReturnsData - AllReturns.csv.csv')
df4 = pd.read_csv('ReturnsData - OrderCreationdetails.csv.csv')
df5 = pd.read_csv('ReturnsData - Return_guideid_counts.csv.csv')


def generate_table(dataframe,max_rows=1000000):
    return html.Table(
        # Header
        [html.Tr([html.Th(col) for col in dataframe.columns])] +

        # Body
        [html.Tr([
            html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
        ]) for i in range(min(len(dataframe), max_rows))]
    )


external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    dcc.Dropdown(
        id='my-dropdown',
        options=[
            {'label' : 'Returns Summary' , 'value' : 'df1'},
            {'label' : 'NonReturn guideid counts' , 'value' : 'df2'}
        ],
        # value='df1'
        # multi = True
    ),
    html.Div(id='output-container')
])


@app.callback(
    dash.dependencies.Output('output-container', 'children'),
    [dash.dependencies.Input('my-dropdown', 'value')])
def update_output(value):
    return generate_table(df1)



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

Здесь из двух вариантов я могу только вызвать функцию для отображения df1. Как мне вызвать df2, когда выбран второй выпадающий список?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы жестко закодировали df1 в вашем generate_table методе. Необходимо сделать параметр этого метода динамическим, в зависимости от того, что value передается через метод update_output обратного вызова (это то, что пользователь выбирает из раскрывающегося списка). Следуя примеру из официальных доков Dash-Plotly , вам необходимо изменить код следующим образом:

@app.callback(
    dash.dependencies.Output('output-container', 'children'),
    [dash.dependencies.Input('my-dropdown', 'value')])
def update_output(value):
    return generate_table(value)

Если вам нужно использовать разные функции для df1 и df2, вы можете добавить эту логику:

def update_output(value):
    if value == df1:
        return generate_table(value)
    elif value == df2:
        return other_generate_table_function(value)
...