代码之家  ›  专栏  ›  技术社区  ›  Felipe

使用panda库和python中的破折号创建带有标签和值的下拉列表

  •  0
  • Felipe  · 技术社区  · 7 年前

    我正在使用python中的panda库读取csv文件并填充下拉列表。我的应用程序使用破折号来创建HTML Web界面。我只填充下拉列表的值,下拉列表的标签与值相同。如何将标签更改为csv文件中的文本?

    可用\u 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)
        ])
    
    3 回复  |  直到 7 年前
        1
  •  0
  •   Felipe    7 年前

    我得用字典…

    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)
        ])
    
        2
  •  0
  •   arudzinska    7 年前

    如何用与熊猫不同的方式读取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()
    
        3
  •  0
  •   rahlf23    7 年前

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

    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()