将修改后的破折号数据表保存到数据框

2024-01-15

我是 dash 的新手,我正在努力将 dash 数据表上所做的编辑保存回数据框 这是我的数据表代码

import dash
from dash.dependencies import Input, Output, State
import dash_table
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import sqlalchemy

app = dash.Dash(__name__)


engine = sqlalchemy.create_engine('mysql+pymysql://root:@127.0.0.1:3306/sfp')

df = pd.read_sql_table("base_case",engine)

app.layout = html.Div([
    html.Div([
        dcc.Input(
            id='adding-rows-name',
            placeholder='Enter a column name...',
            value='',
            style={'padding': 10}
        ),
        html.Button('Add Column', id='adding-rows-button', n_clicks=0)
    ], style={'height': 50}),

    dash_table.DataTable(
        id='adding-rows-table',
        columns=[{"name": i, "id": i} for i in df.columns],
        data=df.to_dict('records'),
        editable=True,
        row_deletable=True
    ),

    html.Button('Add Row', id='editing-rows-button', n_clicks=0),
])

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

有什么解决办法吗?


您需要对其进行回调,这是一个如何执行此操作的示例:

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

app = dash.Dash(__name__)

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')

nmb_clicks = 0
app.layout = html.Div([
    dcc.Store(id='click-memory', data = {'nmb_clicks': nmb_clicks}),
    html.Div([
        dcc.Input(
            id='adding-rows-name',
            placeholder='Enter a column name...',
            value='',
            style={'padding': 10}
        ),
        html.Button('Add Column', id='adding-columns-button', n_clicks=nmb_clicks)
    ], style={'height': 50}),

    dash_table.DataTable(
        id='adding-rows-table',
        columns=[{"name": i, "id": i} for i in df.columns],
        data=df.to_dict('records'),
        editable=True,
        row_deletable=True
    ),

    html.Button('Add Row', id='editing-rows-button', n_clicks=0),
])

@app.callback(dash.dependencies.Output('adding-rows-table', 'columns'),
             [dash.dependencies.Input('adding-columns-button', 'n_clicks'),
              dash.dependencies.Input('adding-rows-name', 'value')],
             [dash.dependencies.State('click-memory', 'data')])
def update_dropdown(click, name, data):
    if click != data['nmb_clicks']:
        if name not in df.columns:
            df[name] = [float('nan')] * len(df.index)

    return [{"name": i, "id": i} for i in df.columns]

@app.callback(dash.dependencies.Output('click-memory', 'data'),
             [dash.dependencies.Input('adding-columns-button', 'n_clicks')],
             [dash.dependencies.State('click-memory', 'data')])
def on_data(click, data):
    if click != nmb_clicks:
        data['nmb_clicks'] = data['nmb_clicks'] + 1

    return data

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

请注意,您需要用一些有意义的值填充该列(现在正在插入空单元格)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将修改后的破折号数据表保存到数据框 的相关文章

随机推荐