Как отобразить pandas фрейм данных в VBOX, используя ipywidgets - PullRequest
1 голос
/ 11 апреля 2020

Я хотел бы отобразить pandas фрейм данных в интерактивном режиме, используя ipywidgets. Пока код получает некоторые выборки, а затем выполняет некоторые вычисления. Для этого примера, в действительности, не используются входные метки. Однако моя проблема заключается в том, что когда я хочу отобразить pandas фрейм данных, он не рассматривается как виджет. Но как я могу красиво отобразить pandas фрейм данных с помощью виджетов? В конце я хотел бы иметь хорошую таблицу в main_box

, здесь приведен пример кода, который работает в любом ноутбуке Jupyter

import pandas as pd
import ipywidgets as widgets

def button_run_on_click(_):
    status_label.value = "running...."

    df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
    status_label.value = ""

    result_box = setup_ui(df)

    main_box.children = [selection, button_run, status_label, result_box]


def setup_ui(df):

    return widgets.VBox([df])

selection_box = widgets.Box()
selection_toggles = []
selected_labels = {}
default_labels = ['test1', "test2"]

labels = {"test1": "test1", "test2": "test2", "test3": "test3"}

def update_selection(change):
    owner = change['owner']
    name = owner.description

    if change['new']:
        owner.icon = 'check'
        selected_labels[name] = labels[name]
    else:
        owner.icon = ""
        selected_labels.pop(name)

for k in sorted(labels):
    o = widgets.ToggleButton(description=k)
    o.observe(update_selection, 'value')
    o.value = k in default_labels
    selection_toggles.append(o)
    selection_box.children = selection_toggles

status_label = widgets.Label()
status_label.layout.width = '300px'

button_run = widgets.Button(description="Run")
main_box = widgets.VBox([selection_box, button_run, status_label])
button_run.on_click(button_run_on_click)
display(main_box)

1 Ответ

1 голос
/ 14 апреля 2020
def setup_ui(df):

    out = widgets.Output()
    with out:
        display(df)
    return out

Если вы измените свою функцию setup_ui на эту, вы можете вернуть виджет Вывод с вашим фреймом данных.

НО, в вашей функции button_run_on_click она появляется selection не определена. Должно ли это быть что-то еще?

...