首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ipywidgets interact不会将日期选择器应用于DataFrame ("TypeError:'DataFrame‘object is not callable")

Ipywidgets interact不会将日期选择器应用于DataFrame ("TypeError:'DataFrame‘object is not callable")
EN

Stack Overflow用户
提问于 2020-02-17 11:51:13
回答 1查看 735关注 0票数 0

我正在构建一个jupyter笔记本,它使用一些交互式小部件来帮助在一些数据帧中移动。我的jupyter和python经验有限,到目前为止,我笔记本上的大部分内容都是重新创建我之前在一系列Excel PivotTables中创建的合并和计算。

第一次尝试交互式窗口小部件的效果很好。它调用dataframe,使用一个滑动小部件根据列的结果限制返回的行数(一个任务打开了多少天):

代码语言:javascript
运行
复制
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,以根据分配的创建日期限制结果。它的一部分是有效的,比如日期选择器填充了最早和最晚的日期,但它们并不绑定到数据帧。代码如下:

代码语言:javascript
运行
复制
interact(df,
        start_date=widgets.DatePicker(value=df.assignment_creation_date.min()),
        end_date=widgets.DatePicker(value=df.assignment_creation_date.max()))

在Jupyter显示日期选择器之后,它会显示以下错误,然后显示未过滤的数据帧。

代码语言:javascript
运行
复制
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时会出现"object is not callable“错误,也不确定为什么DatePickers成功地读取了DataFrame列,但却断开了连接。

我试图创建的行为将调用整个dataframe,但让我过滤从datepicker中选择的日期之间的结果行。我遗漏了什么?

编辑:我知道代码很乱,事后看来,我不应该单独导入interact、interactive、fixed、interact_manual,然后再导入所有的ipywidget。

编辑2:我不能让AC24的解决方案工作,但我认为这更多地是因为我自己无法正确定义一个过滤数据帧的函数。我最终找到了QGrid,它有一个datepicker和其他过滤器。

有关QGrid的更多信息,请访问https://qgrid.readthedocs.io/en/latest/,但如果有人对如何定义函数以将数据帧作为函数传递有更明确的描述,请随时添加。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 16:29:00

请注意,interact的行为与interactive装饰器不同。在使用interact时,第一个参数应该是一个函数/callable,当您更改任何小部件时都会调用该函数。您传入了数据帧df作为第一个参数,因此interact尝试使用start_date和end_date关键字将df作为函数调用。因此出现了错误,因为数据帧是不可调用的。

请看文档中的示例,您可能希望构建一个简单的函数来过滤数据帧,并将该函数名用作interact的第一个参数。

https://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html#Basic-interact

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60255718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档