Is there a way to have interact(f)
ignore certain arguments in f
? I believe it is getting confused by the fact that I have a default argument that I use to pass in a dataframe. Here is my function:
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)
Here is what I'm trying to do:
interact(show_stats,start=start_str,end=today_str)
And here is the error I'm getting:
I hypothesize that interact
somehow changes df_pnl
into a string (since it gives a dropdown of the column headers in the interact output), and fails because it then tries to do df_pnl['Fulldate'].....
on a string, which causes the error shown.
How do I get around this? Could I exclude that argument from my function while still having it work on the correct dataframe? Is there an option within interact to ignore certain arguments in the function?
Thanks
So it is a little difficult to test this solution without a sample DataFrame but I think that functools.partial
may be what you are looking for. Essentially partial
allows you to define a new function with one of the keyword arguments or positional arguments loaded beforehand. Try the code below and see if works;
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)
Update:
You could also try ipywidgets the fixed
function.
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))
Please comment below if this doesn't solve the problem.