Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Dash/Python中的下拉框筛选数据表_Python_Plotly_Plotly Dash - Fatal编程技术网

使用Dash/Python中的下拉框筛选数据表

使用Dash/Python中的下拉框筛选数据表,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我正在使用Python和Dash创建一个交互式web应用程序。我已经创建了一个简单的表格来显示所有球员和一般统计数据,但是我想用一个下拉列表来过滤表格,这样就可以只选择某个球队的球员 下拉函数正在工作,但我真的很难处理数据表和回调。我知道您可以在标题中进行筛选(我找到的所有教程都演示了这一点),但我确实希望它使用回调方法更新表,这将有助于我接下来需要做的事情 如果需要,这里有一个指向我的excel数据的链接 我目前的代码是: import openpyxl from openpyxl

我正在使用Python和Dash创建一个交互式web应用程序。我已经创建了一个简单的表格来显示所有球员和一般统计数据,但是我想用一个下拉列表来过滤表格,这样就可以只选择某个球队的球员

下拉函数正在工作,但我真的很难处理数据表和回调。我知道您可以在标题中进行筛选(我找到的所有教程都演示了这一点),但我确实希望它使用回调方法更新表,这将有助于我接下来需要做的事情

如果需要,这里有一个指向我的excel数据的链接

我目前的代码是:

    import openpyxl
from openpyxl import load_workbook

import os
import pathlib

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

navy = '#06122F'
blue = '#0074D9'
gb_blue = '#004373'
red = '#C51E42'
light_grey = '#F6F6F6'
#=-----------------------

df = pd.read_excel('Box Data.xlsx', sheet_name='Player Stats')

app = dash.Dash(__name__)

#--------------------------------
#group by team and then take an average of the advanced stats
df = df.groupby(['Player', 'Team'])[['#', 'MIN', 'PTS', 'FGM', 'FGA', 'FG%']].mean()
df.reset_index(inplace=True)


app.layout = html.Div([

    html.Label('Select Team'),
    dcc.Dropdown(
        id='select_team',
        options=[{'label': i, 'value': i} for i in df['Team'].unique()],
        value=[i for i in df['Team']],
        searchable=True,
        style={'width':'75%'}
        ),
    dash_table.DataTable(
        id='general_stats',
        columns=[{"name": i, "id": i} for i in df.columns],
        data=df.to_dict('records'),
        style_header={
            'backgroundColor': blue,
            'fontWeight': 'bold',
            'color': 'white',
            'border': '0px'
        },
        style_cell={'padding': '5px', 'border': '0px', 'textAlign': 'center'},
        style_data_conditional=[
        {
            'if': {'row_index': 'odd'},
            'backgroundColor': light_grey,
            'if':{
                'filter_query': '{Team}= "TEAM SOLENT KESTRELS"' #filter to display our team
            },
            'backgroundColor': red,
            'color': 'white'
        }
        ],
        style_cell_conditional=[
        {
        'if': {'column_id': c},
            'textAlign': 'left'
        } for c in ['Player', 'Team']
        ],
        style_as_list_view=True,
        page_action='native',
        fixed_rows={'headers':True},
        style_table={'height': '400px', 'overflowY': 'auto'},
        sort_action='native',
    )

])

@app.callback(
    [Output('general_stats', 'data')],
    [Input(component_id='select_team', component_property='value')]
)


def update_table(option_selected):
    filtered_df = df[df.Team != option_selected]

    return(filtered_df)


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

提前感谢您的帮助

确切的问题是什么?我看到您正在将df返回到datatable的数据字段。但是在html中,您的usinf df.to_dict()。另外,您正在按团队筛选df!=如果我诚实的话,我在回叫中跌跌撞撞地通过了def,根据我的研究,我只走了那么远,但可能是完全错误的。我基本上希望根据下拉列表中选择的团队筛选表(因此将代码更改为==而不是!=)。我收到一条错误消息,上面写着dash.exceptions.invalidcallbackreturnvalue。。。。。。是一个多输出。将输出类型排除为列表或元组,但得到了。。。。。。。(它显示了df)哦,这是因为在回调装饰器中,您将输出放在一个列表中。要么删除该列表,要么返回[filtereddf..to_dict(records)]惊人的效果!谢谢你的帮助,比我想象的更接近正确的代码。对于遇到此问题的任何人,最后的代码是
def update\u table(option\u selected):filtered\u df=df[df.Team==option\u selected]return[filtered\u df.to\u dict('records')]
确切的问题是什么?我看到您正在将df返回到datatable的数据字段。但是在html中,您的usinf df.to_dict()。另外,您正在按团队筛选df!=如果我诚实的话,我在回叫中跌跌撞撞地通过了def,根据我的研究,我只走了那么远,但可能是完全错误的。我基本上希望根据下拉列表中选择的团队筛选表(因此将代码更改为==而不是!=)。我收到一条错误消息,上面写着dash.exceptions.invalidcallbackreturnvalue。。。。。。是一个多输出。将输出类型排除为列表或元组,但得到了。。。。。。。(它显示了df)哦,这是因为在回调装饰器中,您将输出放在一个列表中。要么删除该列表,要么返回[filtereddf..to_dict(records)]惊人的效果!谢谢你的帮助,比我想象的更接近正确的代码。对于遇到此问题的任何人,最后的代码是
def update\u table(option\u selected):filtered\u df=df[df.Team==option\u selected]return[filtered\u df.to\u dict('records')]