如何在Python中通过Plotly从Dash的下拉列表中选择数据集列?

y

我希望获得有关在Python中使用Dlot by Plotly创建仪表板的一些指导。尽管在线上有很多文档和论坛帖子,但我认为他们假设我可能会缺少一些知识,尤其是在正确使用回调实现交互性方面。

我想要实现的是一个仪表板,它将使我能够:

  1. 上载Excel档案
  2. 从Excel文件中选择一列
  3. 运行一个函数来处理该列中的数据
  4. 在表中显示结果输出数据

我试图创建一个最小的工作示例,但一直在努力。到目前为止,这是我所管理的:

import base64
import io
import pandas as pd
import dash
import dash_table
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State

## 1. Define overall dashboard layout

Dashboard = dash.Dash(__name__, external_stylesheets=['https://codepen.io/chriddyp/pen/bWLwgP.css'])
Dashboard.layout = html.Div([
                             html.H1('Dashboard Prototype', style={'width':'100%', 'textAlign': 'center'}),
                             dcc.Upload(
                                       id       = 'Dashboard_Input',
                                       children = html.A('Select Files'),
                                       style    = {'width': '100%', 'height': '60px', 'lineHeight': '60px', 'borderWidth': '1px',
                                                   'borderStyle': 'dashed', 'borderRadius': '5px', 'textAlign': 'center', 'display': 'inline-block'},
                                       multiple = True
                                       ),
                             html.Br(),
                             html.Div(id='Dashboard_Dropdown'),
                             html.Br(),
                             html.Div(id='Dashboard_Output')
                           ])

## 2. Define functions to upload, process and present data

def selectData(contents, filename, date):

    content_type, content_string = contents.split(',')
    decoded = base64.b64decode(content_string)

    try:
        Raw_Data = pd.read_excel(io.BytesIO(decoded))
    except Exception as e:
        return html.Div(['There was an error processing this file.'])

    Dropdown = html.Div([                      
                         html.H4 (('File Name: ', filename), style={'width':'100%', 'textAlign': 'center'}),
                         html.Br(),
                         dcc.Dropdown(
                                      id          = 'Dataset_and_Column',
                                      options     = [{'label': i, 'value': i} for i in Raw_Data.columns],
                                      style       = {'width': '100%', 'height': '60px', 'lineHeight': '60px', 'borderWidth': '1px',
                                                     'borderStyle': 'dashed', 'borderRadius': '5px', 'textAlign': 'center', 'display': 'inline-block'},
                                      placeholder =  'Select Dataset Column'
                                     ),
                         html.Br(),
                        ])

    return Dropdown

def processData(Raw_Data, Column_Label):

    # DO SOME PROCESSING THAT RESULTS IN 'TABLE':
    Table      = Table
    HTML_Table = html.Div([ 
                           dash_table.DataTable(
                                                data         = Table.to_dict('records'),
                                                columns      = [{'name': i, 'id': i} for i in Table.columns],
                                                style_cell   = {'textAlign': 'center', 'width': '100px'}, 
                                                editable     = False,
                                                style_header = {'fontWeight': 'bold', 'textAlign': 'center'},
                                                style_table  = {'maxHeight': '50ex', 'width': '100%'}
                                               ),
                           html.Hr()
                         ])
    return HTML_Table

## 4. Define callback functions

Dashboard.config.suppress_callback_exceptions = True

@Dashboard.callback(
                    Output('Dashboard_Dropdown', 'children'),
                    [Input('Dashboard_Input'   , 'contents')],
                    [State('Dashboard_Input'   , 'filename'), State('Dashboard_Input', 'last_modified')]
                   )
def createDropdown(list_of_contents, list_of_names, list_of_dates):
    if list_of_contents is not None:
       Dropdown = [selectData(c, n, d) for c, n, d in zip(list_of_contents, list_of_names, list_of_dates)]
       return Dropdown

################################################################################
################################################################################

# THIS BIT DOESN'T WORK #
# Need to make this callback function take an input of Raw_Date and Column_Label (selected from the dropdown) to run the processData() function.

@Dashboard.callback(
                    Output('Dashboard_Output'  , 'children'),
                    [Input('Dataset_and_Column', 'contents'), Input('Dataset_and_Column', 'value')],
                   )
def processSelectedColumn(contents, value):

    # HTML_Table = processData(contents, value)

    return value#HTML_Table

    # ^^^^^^ Note that this allow 'value' to be printed on the dashboard but 
    # when the commented 'HTML_Table' bits are uncommented it fails

################################################################################
################################################################################

## 6. Run dashboard

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

这使我可以选择一个Excel文件,然后打印从中创建的Pandas数据框的选定列,但是我不确定如何将它们全部连接在一起以processData()在选定列上运行函数。

关于如何未正确使用或连接回调,函数等的任何想法吗?

珊瑚湾

您还需要processSelectedColumn回调函数来接受value下拉菜单中的Input和。也可以从上传中获取数据,State而不是Input这应该为您提供执行所需计算所需的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Plotly-Dash:如何在字典的多个数据框中的多个列之间进行选择?

来自分类Dev

如何在Python的sqlite3中选择数据列表在哪里是所有列的子集

来自分类Dev

用户从下拉列表中选择值时如何在文本字段中显示数据库值

来自分类Dev

如何在python中以随机顺序从列表中选择条目

来自分类Dev

如何在jQuery下拉列表中选择值

来自分类Dev

如何从 3 个下拉列表中选择数据并在文本框中显示结果

来自分类Dev

如何从pgsql中的列表中选择数据

来自分类Dev

如何在Excel中选择数据列?

来自分类Dev

Selenium Python:如何从下拉列表中选择项目

来自分类Dev

当我从下拉列表中选择数据时,如何在URL(media.php?data = 123)中添加$ _GET ['data']?

来自分类Dev

从下拉列表中选择数据

来自分类Dev

如何在从下拉列表中选择值时刷新所有下拉列表

来自分类Dev

如何通过列值选择数据框列表中的行

来自分类Dev

python pandas通过列名称列表从数据框中选择列

来自分类Dev

如何返回由2个下拉列表更新的数据表作为Plotly Python中的输入

来自分类Dev

如何通过在下拉列表中选择并在表格中显示来获取所有项目名称

来自分类Dev

我可以通过Python中的splinter模块以某种方式从页面的下拉列表中选择特定元素吗

来自分类Dev

我可以通过Python中的splinter模块以某种方式从页面的下拉列表中选择特定元素吗

来自分类Dev

如何在R中另一个数据集的列中选择一个数据集中的一些行?

来自分类Dev

从 selenium python 的下拉列表中选择

来自分类Dev

如何通过从.net中的用户获取列来从数据库中选择多列

来自分类Dev

如何通过从.net中的用户获取列来从数据库中选择多列

来自分类Dev

通过点击数据表行从下拉列表中选择一个选项

来自分类Dev

如何使用codeigniter和bootstrap显示从数据库中选择的值并显示在下拉列表中

来自分类Dev

如何在数据列表中选择设置HTML PHP

来自分类Dev

从下拉列表中选择数据并将其保存到 Django 中的数据库中

来自分类Dev

如何在从角度材料选择下拉列表中选择值时显示按钮

来自分类Dev

如何在数据前的下拉列表中显示选择的选项

来自分类Dev

从数据库中选择数据并插入到下拉列表中-MVC 4

Related 相关文章

  1. 1

    Plotly-Dash:如何在字典的多个数据框中的多个列之间进行选择?

  2. 2

    如何在Python的sqlite3中选择数据列表在哪里是所有列的子集

  3. 3

    用户从下拉列表中选择值时如何在文本字段中显示数据库值

  4. 4

    如何在python中以随机顺序从列表中选择条目

  5. 5

    如何在jQuery下拉列表中选择值

  6. 6

    如何从 3 个下拉列表中选择数据并在文本框中显示结果

  7. 7

    如何从pgsql中的列表中选择数据

  8. 8

    如何在Excel中选择数据列?

  9. 9

    Selenium Python:如何从下拉列表中选择项目

  10. 10

    当我从下拉列表中选择数据时,如何在URL(media.php?data = 123)中添加$ _GET ['data']?

  11. 11

    从下拉列表中选择数据

  12. 12

    如何在从下拉列表中选择值时刷新所有下拉列表

  13. 13

    如何通过列值选择数据框列表中的行

  14. 14

    python pandas通过列名称列表从数据框中选择列

  15. 15

    如何返回由2个下拉列表更新的数据表作为Plotly Python中的输入

  16. 16

    如何通过在下拉列表中选择并在表格中显示来获取所有项目名称

  17. 17

    我可以通过Python中的splinter模块以某种方式从页面的下拉列表中选择特定元素吗

  18. 18

    我可以通过Python中的splinter模块以某种方式从页面的下拉列表中选择特定元素吗

  19. 19

    如何在R中另一个数据集的列中选择一个数据集中的一些行?

  20. 20

    从 selenium python 的下拉列表中选择

  21. 21

    如何通过从.net中的用户获取列来从数据库中选择多列

  22. 22

    如何通过从.net中的用户获取列来从数据库中选择多列

  23. 23

    通过点击数据表行从下拉列表中选择一个选项

  24. 24

    如何使用codeigniter和bootstrap显示从数据库中选择的值并显示在下拉列表中

  25. 25

    如何在数据列表中选择设置HTML PHP

  26. 26

    从下拉列表中选择数据并将其保存到 Django 中的数据库中

  27. 27

    如何在从角度材料选择下拉列表中选择值时显示按钮

  28. 28

    如何在数据前的下拉列表中显示选择的选项

  29. 29

    从数据库中选择数据并插入到下拉列表中-MVC 4

热门标签

归档