Ipywidgets Jupyter Notebook 交互忽略参数
Ipywidgets Jupyter Notebook Interact Ignore Argument
有没有办法让 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)
这是我遇到的错误:
我假设 interact
以某种方式将 df_pnl
更改为字符串(因为它在交互输出中给出了 headers 列的下拉菜单),但失败了,因为它随后尝试在字符串上执行 df_pnl['Fulldate'].....
,这会导致显示的错误。
我该如何解决这个问题?我可以从我的函数中排除该参数,同时仍然让它在正确的数据帧上工作吗? interact 中是否有一个选项可以忽略函数中的某些参数?
谢谢
因此,如果没有示例 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)
更新:
您也可以试试 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))
如果这不能解决问题,请在下方评论。
您可以使用闭包:
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)
有没有办法让 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)
这是我遇到的错误:
我假设 interact
以某种方式将 df_pnl
更改为字符串(因为它在交互输出中给出了 headers 列的下拉菜单),但失败了,因为它随后尝试在字符串上执行 df_pnl['Fulldate'].....
,这会导致显示的错误。
我该如何解决这个问题?我可以从我的函数中排除该参数,同时仍然让它在正确的数据帧上工作吗? interact 中是否有一个选项可以忽略函数中的某些参数?
谢谢
因此,如果没有示例 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)
更新:
您也可以试试 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))
如果这不能解决问题,请在下方评论。
您可以使用闭包:
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)