首页 > 解决方案 > “我正在尝试根据选择的下拉值获取单行的值。输出出错。”

问题描述

“我正在尝试根据选择的下拉值获取单行的值。

我正在确认输出以确保我可以在同一晚做一个条形图。”同样需要您的专业知识帮助。

任何其他方式调用相同。提前感谢您的帮助。


代码

import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd
df = pd.read_csv('E:\pylab\dshlab\my_dash_app\solar.csv')

app = dash.Dash()
dpdown = []
for i in df['state']:
   str(dpdown.append({'label':i,'value':(i)}))

app.layout = html.Div([
    html.H4('Select your State'),
    dcc.Dropdown(id='dropdown', style={'height': '30px', 'width': '100px'}, options=dpdown,
        value=df['state']),
    #dcc.Graph(id='graph'),
    html.Div(id='table-container')
])

@app.callback(
    dash.dependencies.Output('table-container','children'),
    [dash.dependencies.Input('dropdown', 'value')])

def display_table(dpdown):
    return(df[df['state']==dpdown])

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

错误:

ash.exceptions.InvalidCallbackReturnValue:<Outputtable-container.children的回调> 返回的值的类型DataFrame 不是 JSON 可序列化的。

有问题的值要么是唯一返回的值,要么位于返回列表的顶层,并且具有字符串表示形式

州 太阳能电站数量 装机容量 (MW) 平均每台发电 MW (GWh) 1 亚利桑那州 48 1078 22.5 2550

通常,Dash 属性只能是 dash 组件、字符串、字典、数字、None 或它们的列表。

标签: pythonpython-3.xdashboardplotly-dash

解决方案


我用于dash_table创建表。你可以在这里阅读更多关于它的信息。

代码如下:

import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
import dash_table as dt
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd
df = pd.read_csv('E:\pylab\dshlab\my_dash_app\solar.csv')

app = dash.Dash()
dpdown = []
for i in df['state']:
   str(dpdown.append({'label':i,'value':(i)}))

app.layout = html.Div([
    html.H4('Select your State'),
    dcc.Dropdown(id='dropdown', style={'height': '30px', 'width': '100px'}, options=dpdown),
    #dcc.Graph(id='graph'),
    html.Div(
        id='table-container',
        className='tableDiv'
    )
])

@app.callback(
    dash.dependencies.Output('table-container','children'),
    [dash.dependencies.Input('dropdown', 'value')])

def display_table(dpdown):
    df_temp = df[df['state']==dpdown]
    return html.Div([
        dt.DataTable(
            id='main-table',
            columns=[{'name': i, 'id': i} for i in df_temp.columns],
            data=df_temp.to_dict('rows')
        )
    ])

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

这将在每次回调发生时临时为您的状态设置数据帧和过滤器,并仅输出与状态对应的行。


推荐阅读