Ipywidgets Jupyter Notebook Interact忽略参数

时间:2017-08-02 22:09:20

标签: python-3.x jupyter-notebook ipython-notebook jupyter ipywidgets

有没有办法让interact(f)忽略f中的某些参数?我相信它有一个事实,我有一个默认参数,我用来传递数据帧。这是我的功能:

def show_stats(start,end,df_pnl=df_pnl):
    mask = df_pnl['Fulldate'] >= start & df_pnl['FullDate'] <= end
    df_pnl = df_pnl[mask]
    #do some more transformations here
    display(df_pnl)

以下是我要做的事情:

interact(show_stats,start=start_str,end=today_str)

这是我得到的错误:

enter image description here

我假设interact以某种方式将df_pnl更改为字符串(因为它提供了交互输出中列标题的下拉列表),然后失败,因为它然后尝试df_pnl['Fulldate'].....在字符串上,导致显示错误。

我如何解决这个问题?我可以从我的函数中排除该参数,同时仍然可以在正确的数据框架上工作吗?交互中是否有一个选项可以忽略函数中的某些参数?

谢谢

2 个答案:

答案 0 :(得分:3)

因此,如果没有示例DataFrame来测试此解决方案有点困难,但我认为functools.partial可能正是您所寻找的。基本上partial允许您使用事先加载的关键字参数或位置参数之一来定义新函数。尝试下面的代码,看看是否有效;

from functools import partial

def show_stats(start, end, df_pnl):
    mask = df_pnl['Fulldate'] >= start & df_pnl['FullDate'] <= end
    df_pnl = df_pnl[mask]
    #do some more transformations here
    display(df_pnl)

# Define the new partial function with df_pnl loaded.
show_stats_plus_df = partial(show_stats, df_pnl=YOUR_DATAFRAME)

interact(show_stats_plus_df, start=start_str, end=today_str)

更新

你也可以试试fixed函数的ipywidgets。

from ipywidgets import fixed

def show_stats(start, end, df_pnl):
    mask = df_pnl['Fulldate'] >= start & df_pnl['FullDate'] <= end
    df_pnl = df_pnl[mask]
    #do some more transformations here
    display(df_pnl)

interact(show_stats, start=start_str, end=today_str, df_pnl=fixed(df_pnl))

如果这不能解决问题,请在下面发表评论。

答案 1 :(得分:0)

您可以使用闭包:

from ipywidgets import interact

def show_stats(start, end, df_pnl)
  @interact(start=start_str, end=today_str)
  def _show_stats(start, end):
      mask = df_pnl['Fulldate'] >= start & df_pnl['FullDate'] <= end
      df_pnl = df_pnl[mask]
      #do some more transformations here
      display(df_pnl)