Python Dash:将熊猫数据帧加载到数据表中

新手上路,请多包涵

我最近一直在尝试用 Dash 构建一个应用程序,但尽管浏览了许多指南,我还是无法弄清楚如何将 pandas 数据框导入 Dash 的数据表(它本质上是一个 pandas 数据框,除了网络托管和反应式) .

大多数示例都说明了如何从示例中已经硬编码的数据框中手动选择某些列/行,如此 处所示。然而,在我的情况下,数据框是在我的代码中构建的(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)

原文由 Coolio2654 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 623
2 个回答

有人 也在 plotly 论坛上回复我之后(谢天谢地),似乎最终的答案是用 pandas 数据框的列预先设置一个人的数据表,这些列将在某个时候进入它,就像这样,

 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'}]
)

,然后发送你的 pandas 数据框的字典。

原文由 Coolio2654 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设您的 tweets 函数返回一个数据框,将表列作为第二个输出添加到您的回调应该可行。

 @app.callback(
    [Output(component_id='tweet_table', component_property='data'),
     Output(component_id='tweet_table', component_property='columns')
    [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)
    columns = [{'name': col, 'id': col} for col in tweets.columns]
    data = tweets.to_dict(orient='records')
    return data, columns

原文由 haydard 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题