Взаимодействие Ipywidgets не применяет указатель даты к DataFrame («Ошибка TypeError: объект DataFrame не вызывается») - PullRequest
0 голосов
/ 17 февраля 2020

Я создаю блокнот Jupyter, в котором используются интерактивные виджеты для перемещения по некоторым кадрам данных. Мой опыт работы с jupyter и python ограничен, и большая часть моей записной книжки до сих пор воссоздает консолидации и вычисления, которые я ранее создал в серии сводных таблиц Excel.

Первая попытка интерактивного виджета работала нормально. Он вызывает фрейм данных со скользящим виджетом для ограничения возвращаемых строк по результату столбца (сколько дней было открыто назначение):

from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
@interact
def days_open_widget(column='days_open', x=(0,2000,5)):
    return df.loc[df[column] > x]

Далее я хотел иметь возможность отдельно исследовать В DataFrame используются два средства выбора даты, чтобы ограничить результаты датой создания назначения. Части этого работают, как средства выбора даты, заполненные самыми ранними и самыми поздними датами, но они не привязаны к фрейму данных. Вот код:

interact(df,
        start_date=widgets.DatePicker(value=df.assignment_creation_date.min()),
        end_date=widgets.DatePicker(value=df.assignment_creation_date.max()))

После того, как Jupyter отобразит указатели даты, он выдаст следующую ошибку, затем отобразит нефильтрованный фрейм данных.

TypeError                                 Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\ipywidgets\widgets\interaction.py in update(self, *args)
    254                     value = widget.get_interact_value()
    255                     self.kwargs[widget._kwarg] = value
--> 256                 self.result = self.f(**self.kwargs)
    257                 show_inline_matplotlib_plots()
    258                 if self.auto_display and self.result is not None:

TypeError: 'DataFrame' object is not callable

Я не уверен, что я ' м отсутствует. Я не уверен, почему при попытке доступа к DataFrame возникает ошибка «объект не вызывается», когда я обращался к нему ранее, или почему DatePickers успешно читает столбец DataFrame, но затем отключается.

Поведение Я пытаюсь создать вызов бы весь фрейм данных, но позвольте мне отфильтровать результирующие строки между датами, выбранными из выбора даты. Чего мне не хватает?

Редактировать: я знаю, что код грязный и задним числом, я не думаю, что я должен импортировать интерактивный, интерактивный, фиксированный, интерактивный_мануал отдельно, а затем импортировать все ipywidgets.

Редактировать 2: Я не смог заставить работать решение AC24, но я думаю, что это больше связано с моей неспособностью правильно определить функцию, которая отфильтровывала фрейм данных. Вместо этого я нашел QGrid, в котором есть средство выбора даты вместе с другими фильтрами.

Дополнительная информация о QGrid: https://qgrid.readthedocs.io/en/latest/, но если у кого-то есть более четкое описание того, как определить функцию чтобы передать фрейм данных как функцию, добавьте его.

1 Ответ

0 голосов
/ 17 февраля 2020

Обратите внимание, что interact ведет себя иначе, чем декоратор interactive. При использовании interact первым аргументом должна быть функция / функция, которая вызывается при изменении любого из виджетов. Вы передали фрейм данных df в качестве первого аргумента, и поэтому interact пытается вызвать df как функцию с ключевыми словами start_date и end_date. Отсюда и ошибка, поскольку кадры данных не могут быть вызваны.

Посмотрите в документации примеры, возможно, вы захотите создать простую функцию для фильтрации вашего кадра данных и использовать это имя функции в качестве первого аргумента для * 1009. *.

https://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html#Basic -взаимодействовать

...