在 python 中使用熊猫库和 Dash Plotly 创建带有标签和值的下拉列表

Create Dropdown with label and values using panda library and Dash Plotly in python

我在 Python 中使用 panda 库从 csv 文件中读取并填充下拉列表。我的应用程序使用 Dash Plotly 创建一个 HTML 网络界面。我只填充下拉列表的值,下拉列表的标签与值相同。如何将标签更改为 csv 文件中的文本?

available_rpi.csv

ip,name
192.168.1.6,"Virtual I²C (192.168.1.6)"
192.168.1.102,"GPS UART (192.168.1.102)"
192.168.1.106,"Ultrasonic I²C (192.168.1.103)"

python 脚本:

import dash,requests,pandas as pd

df = pd.read_csv('available_rpi.csv', usecols = ['ip','name'])
available_rpi = df['ip'].unique()

app.layout = html.Div( [
    html.H1(children='RESENSE'),
    html.Div(children='''RESENSE: Transparent Record and Replay in the Internet of Things (IoT).'''),
    # html.Div(['Name : ', dcc.Input(id='input',value='ACC',type='text') ]),
    # dcc.Markdown(''' '''),
    html.Label('Raspberry Pi'),
    dcc.Dropdown(
        id = "input",
        options=[{'label': i, 'value': i} for i in available_rpi],
        value=''
    ),
    html.Div(id='output'),
    #   Graph for arriving data (static)
    dcc.Graph(id='data', animate=True),
    dcc.Interval(id='graph-update',interval=2*1000)
    ])

您应该使用 orient='records' 将您的 .csv 文件存储为字典列表,然后使用列表理解来设置您的下拉组件选项:

import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html

available_rpi = pd.read_csv('available_rpi.csv').to_dict(orient='records')

app = dash.Dash(__name__)

app.layout = html.Div([

    html.H1(children='RESENSE'),

    html.Div(children='''RESENSE: Transparent Record and Replay in the Internet of Things (IoT).'''),

    html.Label('Raspberry Pi'),

    dcc.Dropdown(
        id = "input",
        options=[{'label': i['name'], 'value': i['ip']} for i in available_rpi],
        value=''
    ),

    html.Div(id='output'),

    #Graph for arriving data (static)
    dcc.Graph(id='data', animate=True),

    dcc.Interval(id='graph-update',interval=2*1000)

])

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

我得用字典....

available_rpi = pd.read_csv('available_rpi.csv', header=None, dtype={0: str}).set_index(0).squeeze().to_dict()
#print("Raspberry Pi's available:")
#for key, car in available_rpi.items():
#    print('{} : {}'.format(key, car))

app.layout = html.Div( [
    html.H1(children='RESENSE'),
    html.Div(children='''RESENSE: Transparent Record and Replay in the Internet of Things (IoT).'''),
    # html.Div(['Name : ', dcc.Input(id='input',value='ACC',type='text') ]),
    # dcc.Markdown(''' '''),
    html.Label('Raspberry Pi'),
    dcc.Dropdown(
        id = "input",
        options=[{'label': v, 'value': k} for k, v in available_rpi.items()],
        value=''
    ),
    html.Div(id='output'),
    #   Graph for arriving data (static)
    dcc.Graph(id='data', animate=True),
    dcc.Interval(id='graph-update',interval=2*1000)
    ])

用 pandas 以稍微不同的方式读取 CSV 数据并将其存储在字典中如何?

import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html

df = pd.read_csv('available_rpi.csv', usecols = ['ip','name'])
available_rpi = df.to_dict('records')

app = dash.Dash(__name__)

app.layout = html.Div( [
    html.H1(children='RESENSE'),
    html.Div(children='''RESENSE: Transparent Record and Replay in the Internet of Things (IoT).'''),
    # html.Div(['Name : ', dcc.Input(id='input',value='ACC',type='text') ]),
    # dcc.Markdown(''' '''),
    html.Label('Raspberry Pi'),
    dcc.Dropdown(
        id = "input",
        options=[{'label': i['name'], 'value': i['ip']} for i in available_rpi],
        value=''
    ),
    html.Div(id='output'),
    #   Graph for arriving data (static)
    dcc.Graph(id='data', animate=True),
    dcc.Interval(id='graph-update',interval=2*1000)
    ])

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