1

有没有办法让interact(f)忽略f中的某些参数?我相信这是因为我有一个默认参数用来传入数据帧,这让我感到困惑。这里是我的功能:Ipywidgets Jupyter Notebook Interact忽略参数

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更改为字符串(因为它在交互输出中提供了列标题的下拉列表),并因此失败,因此tr对字符串执行df_pnl['Fulldate'].....,这会导致显示的错误。

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

感谢

+0

你碰巧试过我的解决方案吗? –

+0

如果您在回答问题时感到困惑,则此链接有一些[有用提示](https://stackoverflow.com/help/someone-answers)。 –

+0

感谢您接受答案。如果你不介意的话,我会很感激。我提出了这个问题,所以它只是正确的?多谢,伙计 :) –

回答

1

所以这是一个有点难以测试没有样品数据帧这个解决办法,但我认为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) 

更新:

您也可以尝试ipywidgets的fixed功能。

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)) 

如果这不能解决问题,请在下面留言。