Как загрузить данные с помощью ipywidgets и отобразить их в современном Jupyter

Я пытаюсь загрузить образец Excel файла, чтобы протестировать функциональность, которую в конечном итоге придется визуализировать с помощью Вуаля. Не говоря уже о том, чтобы выполнить операцию с Dataframe и сделать его доступным для загрузки в виде файла Excel, я даже не могу увидеть Dataframe. Я даже не знаю, загружаю Dataframe или нет.

import ipywidgets as widgets    
def load_data():
    df = pd.read_excel('....xlsx',engine='openpyxl',dtype=str)
    display(df)    
def on_sample_data_click(event):
    load_data()

text_caption = widgets.HTML(value = "<h2>Showing data</h1><h2>")
vbox_text = widgets.VBox([text_caption])
display(vbox_text)

load_sample_data = widgets.Button(description='Click to show', layout=dict(width='auto', height='auto'))
load_sample_data.on_click(on_sample_data_click)
display(load_sample_data)

Дисплей такой:

Теперь, когда я нажимаю Click to show, я ожидал, что Dataframe отобразится, но ничего не появляется.

Любая помощь будет высоко оценен.

Изменения внесены, как вы предложили.

cph_sto 14.06.2024 07:31

Я читаю ваши комментарии здесь и во многих других местах. Они были так полезны, чтобы увидеть перспективу. Данке!

cph_sto 14.06.2024 14:35

Что касается загрузки, см. здесь или здесь или здесь, чтобы начать.

Wayne 14.06.2024 16:25

Рад слышать, что я пытаюсь помочь людям понять ipywidgets, и Jupyter помог вам.

Wayne 14.06.2024 16:28

На следующей неделе я проверю часть загрузки, надеюсь, все заработает. Хороших вам выходных.

cph_sto 14.06.2024 16:38

@Wayne Я мог бы реализовать функции загрузки с помощью предоставленных вами ссылок. Большое спасибо за помощь.

cph_sto 24.06.2024 17:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема здесь пишется вверху. Это резюмирует проблему следующим образом:

«Я подозреваю, что вы думаете, что что-то не работает, хотя оно и есть. (Следовательно, никаких ошибок.) Однако в современных ipywidgets и Jupyter вы должны явно указывать, как вы подключаете генерируемый вывод к области вывода ячейки. ."

Это ваш код, измененный для добавления этой обработки с помощью подхода, позволяющего добавить менеджер контекста with для направления вывода в виджет вывода (вам нужно будет настроить путь/имя файла .xlsx в соответствии с вашим собственным):

import ipywidgets as widgets
from IPython.display import display
output = widgets.Output()
import pandas as pd
def load_data():
    df = pd.read_excel('sample-1-sheet.xlsx',engine='openpyxl',dtype=str)
    with output:
        output.clear_output() # from 'Output widgets: leveraging Jupyter’s display system' https://ipywidgets.readthedocs.io/en/latest/examples/Output%20Widget.html
        display(df)
def on_sample_data_click(event):
    load_data()

text_caption = widgets.HTML(value = "<h2>Showing data</h1><h2>")
vbox_text = widgets.VBox([text_caption])
display(vbox_text)

load_sample_data = widgets.Button(description='Click to show', layout=dict(width='auto', height='auto'))
load_sample_data.on_click(on_sample_data_click)
display(load_sample_data)
display(output)

Подробности

В моем комментарии здесь описывается, как я отредактировал ваш код, чтобы добавить обработку привязки отображения фрейма данных к области вывода через контекстный менеджер. Вероятно, вам захочется прочитать документацию ipywidget «Виджеты вывода: использование системы отображения Jupyter». (Там есть еще пример кода.)

Для упрощения разработки с помощью ipywidgets вам следует рассмотреть возможность использования JupyterLab. Когда я запустил там ваш код, я увидел в консоли журнала, что событие происходит (загорается в левом нижнем углу окна JupyterLab, когда вывод направлен туда), см. мой комментарий здесь для получения дополнительной информации об этом.
Несмотря на то, что я разработал это в JupyterLab, я проверил, что это работает в Voila, также протестировав рендеринг блокнота, см. ниже.

Демонстрация рендеринга блокнотов Voila и Jupyter

Чтобы продемонстрировать в Вуале, нажмите здесь.
Чтобы продемонстрировать это в блокноте нажмите здесь, чтобы запустить блокнот, через который вы можете выполнить пошаговую демонстрацию этого в сеансе, обслуживаемом через сервис MyBinder. Или зайдите сюда, а затем используйте этот блокнот здесь или контент из него.

Очень аннотативный ответ, в котором каждый аспект подробно объяснен с соответствующими веб-ссылками и комментариями. Я не мог бы больше отблагодарить вас за очень полезную помощь, которую вы оказали, и за важные подсказки, которые вы предоставили. СПАСИБО.

cph_sto 14.06.2024 11:17

Другие вопросы по теме

Похожие вопросы

Замена значений NaN на ноль в функции слияния pandas с внешним соединением
Вывод ограничения скорости Pandas на основе минимального изменения в столбце
Почему тип данных numpy возвращает void, когда он был создан как float64?
Получить (приблизительную) матрицу преобразования вращения (numpy) на единичной сфере с учетом отображения векторов (n = 12)
Невозможно удалить виджет после активации флажка в Python Tkinter
Как в Confluence воспроизвести ручной поиск с помощью поиска API?
Надежный способ проверить, был ли метод обернут декоратором изнутри
Как проверить, не может ли пользователь отправлять сообщения (был ограничен или отключен звук) в чате Telegram с помощью Telethon API?
Как сохранить векторы, созданные AzureOpenAIEmbeddingSkill, в индексаторе с учетом моей текущей настройки
Каков наиболее эффективный способ заполнения нескольких столбцов значениями из других столбцов таким образом, чтобы их можно было соединить с суффиксом?