Inserimento del feed da una tabella dati del dashboard alla seconda tabella dati del dashboard
Ho una domanda veloce come principiante con Dash. Sto usando una tabella per accettare l'input dell'utente, leggerlo, eventualmente eseguire un'azione su di esso e quindi restituire una tabella dei risultati sotto la prima. Di seguito è il mio codice:
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import dash_table
import os
from dash.dependencies import Input, Output
import numpy as np
names = ['Player','Pos','Games','Rush Mkt Shr','Yds/Rush','Rush TD Rate','Tgt Mkt Shr','Yds/Rec','Rec TD Rate','Catch Rate','Int Rate','QB Snaps']
team_entries = pd.DataFrame(np.zeros((11,len(names))),columns = names)
team_entries['Pos']=['QB','RB','RB','RB','WR','WR','WR','WR','TE','TE','TEAM']
team_entries['Games'] = 16
app.layout = html.Div([
html.Div(id='div1', children=[dash_table.DataTable(
id='table-editing-simple',
columns=([{'id': p, 'name': p} for p in team_entries.columns]),
data=team_entries.to_dict('records'),
editable=True
)]),
html.Div(id = 'div2', children=[dash_table.DataTable(id='table-editing-simple-output')])
])
@app.callback(
Output('table-editing-simple-output', 'data'),
[Input('table-editing-simple', 'data'),
Input('table-editing-simple', 'columns')])
def display_output(rows, columns):
df = pd.DataFrame(rows, columns=[c['name'] for c in columns])
df['Games'] = df['Games']*2
return df.to_dict('records')
if __name__ == '__main__':
app.run_server(debug=True)
Sfortunatamente la seconda tabella con ID "table-editing-simple-output" non viene stampata e non sono del tutto sicuro del perché. In secondo luogo, se volessi avere nomi di colonna diversi per la tabella di output, come potrei farlo?
Risposte
Provaci: nella tua funzione di callback, invece di restituire dati, prova a sostituire l'output con Output('div2', 'children')
e restituire un trattino completamente nuovo databile in questo modo:
@app.callback(
Output('div2', 'children'),
[Input('table-editing-simple', 'data'),
Input('table-editing-simple', 'columns')])
def display_output(rows, columns):
df = pd.DataFrame(rows, columns=[c['name'] for c in columns])
df['Games'] = df['Games']*2
return dash_table.DataTable(
id='table-output',
columns=columns,
data=rows,
)
In questo modo, puoi anche modificare liberamente i nomi delle colonne! Il codice di lavoro è il seguente:
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import dash_table
import os
from dash.dependencies import Input, Output
import numpy as np
names = ['Player','Pos','Games','Rush Mkt Shr','Yds/Rush','Rush TD Rate','Tgt Mkt Shr','Yds/Rec','Rec TD Rate','Catch Rate','Int Rate','QB Snaps']
team_entries = pd.DataFrame(np.zeros((11,len(names))),columns = names)
team_entries['Pos']=['QB','RB','RB','RB','WR','WR','WR','WR','TE','TE','TEAM']
team_entries['Games'] = 16
app = dash.Dash(__name__)
app.layout = html.Div([
html.Div(id='div1', children=[dash_table.DataTable(
id='table-editing-simple',
columns=([{'id': p, 'name': p} for p in team_entries.columns]),
data=team_entries.to_dict('records'),
editable=True
)]),
html.Div(id = 'div2', children=[dash_table.DataTable(id='table-editing-simple-output')])
])
@app.callback(
Output('div2', 'children'),
[Input('table-editing-simple', 'data'),
Input('table-editing-simple', 'columns')])
def display_output(rows, columns):
df = pd.DataFrame(rows, columns=[c['name'] for c in columns])
df['Games'] = df['Games']*2
return dash_table.DataTable(
id='table-output',
columns=columns,
data=rows,
)
if __name__ == '__main__':
app.run_server(debug=True)