Python 带下拉菜单的 Dash 应用程序选择 excel 文件表并显示在 table 中
Python Dash application with drop down menu that selects excel file sheets and displays in a table
我正在学习 Dash,最终目标是开发一个允许快速分析 excel 文件中的数据集的应用程序。我想要一个允许在 excel 文件中的工作表之间切换的下拉菜单。我无法正确地将其设置为 运行。我可以将其输出到图表,但不能输出到 table。我的代码如下:
import dash
from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html
import dash_table_experiments as dt
import pandas as pd
app = dash.Dash()
df = pd.read_excel('output.xlsx', sheet_name=None)
app.layout = html.Div(
html.Div([dcc.Dropdown(id='drop_value',
options=[{'label': i, 'value': i} for i in df],
value='Sheet1')]),
html.Div([dt.DataTable(rows=[{}],
id='table')])
)
@app.callback(Output('table', 'rows'), [Input('drop_value', 'value')])
def update_info_table(drop_value):
if drop_value == 'Sheet1':
new_data = df['Sheet1'].to_dict()
return new_data
elif drop_value == 'Sheet2':
new_data = df['Sheet2'].to_dict()
return new_data
else:
new_data = df['Sheet3'].to_dict()
return new_data
if __name__ == '__main__':
app.run_server()
当我 运行 此代码时,出现以下错误:
TypeError: init() 接受 1 到 2 个位置参数,但给出了 3 个
我假设这与我尝试提供给数据的数据集的格式有关table。现在我只使用一个虚拟 excel 文件,其中只有两列标记为 'x1' 和 'y1'.
调整后的代码现在似乎可以工作了。任何需要的人都可以在下面找到正确的代码。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import dash_table_experiments as dt
# Load in data set
sheet_to_df_map = pd.ExcelFile('output.xlsx')
dropdown_options = pd.read_excel('output.xlsx', sheet_name=None)
# Create the dash app
app = dash.Dash()
# Define the layout for the drop down menu
app.layout = html.Div([
html.H2("Select Sheet Number"),
html.Div([dcc.Dropdown(id="field_dropdown", options=[{
'label': i,
'value': i
} for i in dropdown_options],
value='Sheet3')],
style={'width': '25%',
'display': 'inline-block'}),
dt.DataTable(rows=[{}],
row_selectable=True,
filterable=True,
sortable=True,
selected_row_indices=[],
id='datatable')
])
@app.callback(
dash.dependencies.Output('datatable', 'rows'),
[dash.dependencies.Input('field_dropdown', 'value')])
def update_datatable(user_selection):
if user_selection == 'Sheet1':
return sheet_to_df_map.parse(0).to_dict('records')
elif user_selection == 'Sheet2':
return sheet_to_df_map.parse(1).to_dict('records')
else:
return sheet_to_df_map.parse(2).to_dict('records')
if __name__ == '__main__':
app.run_server()code here
我正在学习 Dash,最终目标是开发一个允许快速分析 excel 文件中的数据集的应用程序。我想要一个允许在 excel 文件中的工作表之间切换的下拉菜单。我无法正确地将其设置为 运行。我可以将其输出到图表,但不能输出到 table。我的代码如下:
import dash
from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html
import dash_table_experiments as dt
import pandas as pd
app = dash.Dash()
df = pd.read_excel('output.xlsx', sheet_name=None)
app.layout = html.Div(
html.Div([dcc.Dropdown(id='drop_value',
options=[{'label': i, 'value': i} for i in df],
value='Sheet1')]),
html.Div([dt.DataTable(rows=[{}],
id='table')])
)
@app.callback(Output('table', 'rows'), [Input('drop_value', 'value')])
def update_info_table(drop_value):
if drop_value == 'Sheet1':
new_data = df['Sheet1'].to_dict()
return new_data
elif drop_value == 'Sheet2':
new_data = df['Sheet2'].to_dict()
return new_data
else:
new_data = df['Sheet3'].to_dict()
return new_data
if __name__ == '__main__':
app.run_server()
当我 运行 此代码时,出现以下错误: TypeError: init() 接受 1 到 2 个位置参数,但给出了 3 个
我假设这与我尝试提供给数据的数据集的格式有关table。现在我只使用一个虚拟 excel 文件,其中只有两列标记为 'x1' 和 'y1'.
调整后的代码现在似乎可以工作了。任何需要的人都可以在下面找到正确的代码。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import dash_table_experiments as dt
# Load in data set
sheet_to_df_map = pd.ExcelFile('output.xlsx')
dropdown_options = pd.read_excel('output.xlsx', sheet_name=None)
# Create the dash app
app = dash.Dash()
# Define the layout for the drop down menu
app.layout = html.Div([
html.H2("Select Sheet Number"),
html.Div([dcc.Dropdown(id="field_dropdown", options=[{
'label': i,
'value': i
} for i in dropdown_options],
value='Sheet3')],
style={'width': '25%',
'display': 'inline-block'}),
dt.DataTable(rows=[{}],
row_selectable=True,
filterable=True,
sortable=True,
selected_row_indices=[],
id='datatable')
])
@app.callback(
dash.dependencies.Output('datatable', 'rows'),
[dash.dependencies.Input('field_dropdown', 'value')])
def update_datatable(user_selection):
if user_selection == 'Sheet1':
return sheet_to_df_map.parse(0).to_dict('records')
elif user_selection == 'Sheet2':
return sheet_to_df_map.parse(1).to_dict('records')
else:
return sheet_to_df_map.parse(2).to_dict('records')
if __name__ == '__main__':
app.run_server()code here