Я пытаюсь загрузить образец 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
отобразится, но ничего не появляется.
Любая помощь будет высоко оценен.
Я читаю ваши комментарии здесь и во многих других местах. Они были так полезны, чтобы увидеть перспективу. Данке!
Что касается загрузки, см. здесь или здесь или здесь, чтобы начать.
Рад слышать, что я пытаюсь помочь людям понять ipywidgets, и Jupyter помог вам.
На следующей неделе я проверю часть загрузки, надеюсь, все заработает. Хороших вам выходных.
@Wayne Я мог бы реализовать функции загрузки с помощью предоставленных вами ссылок. Большое спасибо за помощь.
Основная проблема здесь пишется вверху. Это резюмирует проблему следующим образом:
«Я подозреваю, что вы думаете, что что-то не работает, хотя оно и есть. (Следовательно, никаких ошибок.) Однако в современных 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, также протестировав рендеринг блокнота, см. ниже.
Чтобы продемонстрировать в Вуале, нажмите здесь.
Чтобы продемонстрировать это в блокноте нажмите здесь, чтобы запустить блокнот, через который вы можете выполнить пошаговую демонстрацию этого в сеансе, обслуживаемом через сервис MyBinder. Или зайдите сюда, а затем используйте этот блокнот здесь или контент из него.
Очень аннотативный ответ, в котором каждый аспект подробно объяснен с соответствующими веб-ссылками и комментариями. Я не мог бы больше отблагодарить вас за очень полезную помощь, которую вы оказали, и за важные подсказки, которые вы предоставили. СПАСИБО.
Изменения внесены, как вы предложили.