Python Dash: загрузка панелей данных pandas в таблицу данных - PullRequest
0 голосов
/ 11 февраля 2019

Недавно я пытался создать приложение с Dash , но, несмотря на просмотр множества руководств, я просто не могу понять, как импортировать кадр данных панд в таблицу данных Dash (которая по сути является пандой).фрейм данных, кроме размещенного в сети и реагирующего).

Большинство примеров иллюстрируют, как вручную выбирать определенные столбцы / строки, взятые из фрейма данных, который уже жестко задан в этом примере, как в здесь .Тем не менее, в моей ситуации, фрейм данных встроен в мой код (и pandas - самый простой способ сделать это), поэтому я в конечном итоге должен найти способ конвертировать pd.Dataframe() в dash_table.DataTable().

Как я могу заставить эту работу?Используя ссылки, я попробовал следующий код, чтобы отправить диктовку моего фрейма данных на dash_table.DataTable(), но ничего не отображается.

Мой код:

## Imports
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_table

from dash.dependencies import Input, Output, State

import datetime as dt
import pandas as pd
import numpy as np

## Custom functions that creates the pandas dataframe
from twitter_functions import old_tweets

app = dash.Dash(dev_tools_hot_reload=True)
app.scripts.config.serve_locally = True
app.config['suppress_callback_exceptions'] = True


app.layout = html.Div(children=[

    html.H3('Twitter App'),

    dcc.Input('ScreenName_Input', type='text'),

    html.Button(id='screenNames_submit_button', children='Submit'),

    dash_table.DataTable(id='tweet_table')

])

@app.callback(
    Output(component_id='tweet_table', component_property='data'),
    [Input(component_id='screenNames_submit_button', component_property='n_clicks_timestamp')],
    [State(component_id='ScreenName_Input', component_property='value')]
)
def display_tweets(submit_button, screen_names):
    tweets = old_tweets(screen_names)

    return tweets.to_dict(orient='records')

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

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

После кто-то также ответил мне на сюжетных форумах (к счастью), кажется, что окончательный ответ - предварительно установить свою Таблицу данных со столбцами информационного кадра панд, который собирается войти в нее.в какой-то момент, например,

dash_table.DataTable(
    id='table',
    columns=[
    {'name': 'Column 1', 'id': 'column1'},
    {'name': 'Column 2', 'id': 'column2'},
    {'name': 'Column 3', 'id': 'column3'},
    {'name': 'Column 4', 'id': 'column4'},
    {'name': 'Column 5', 'id': 'column5'}]
)

, а затем отправьте в поле ввода ваш кадр данных для панд.

0 голосов
/ 11 июля 2019

Вот еще одно решение, которое сработало для меня:

     dt_col_param = []

     for col in output_df.columns:
            dt_col_param.append({"name": str(col), "id": str(col)})

    dash_table.DataTable(
            columns=dt_col_param,
            data=output_df.to_dict('records')
        )

Моя самая большая проблема заключалась в том, что мое приложение продолжало выдавать исключение для всего, что я пытался передать в аргумент 'columns' для dash_table.DataTable (...).

Надеюсь, это поможет избежать необходимости что-либо кодировать жестко.

0 голосов
/ 11 февраля 2019

Это довольно длинный и непроверенный, но на основе https://community.plot.ly/t/dash-datatable-using-callbacks/6756, кажется, что для Dash DataTables неявно требуется начальное значение, если вы собираетесь изменить их с помощью обратного вызова.

Попробуйтеизменив эту строку:

dash_table.DataTable(id='tweet_table')

На это:

dash_table.DataTable(id='tweet_table', rows=[{}])
...