我有一个仪表板,其中根据用户选择的参数定义和显示数据框。我想添加一个按钮,允许用户单击该按钮下载先前定义的数据框。 以下是我定义的用于定义和显示数据框的函数:
def filtra_dati(selezione, canale, metrica):
output.clear_output()
if canale == "ALL":
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), list(metrica)]
else:
df = canali_weekly.loc[(canale, slice(selezione[0],selezione[1])), list(metrica)]
with output:
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
display(df)
我试图嵌套一个新功能(on_button_clicked()
)以添加下载按钮:
def filtra_dati(selezione, canale, metrica):
output.clear_output()
if canale == "ALL":
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), list(metrica)]
else:
df = canali_weekly.loc[(canale, slice(selezione[0],selezione[1])), list(metrica)]
with output:
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
display(df)
def on_button_clicked(b):
with output:
print("Button clicked.")
df.to_excel("~/Downloads/df.xlsx")
但是它不起作用,并且我收到未定义数据帧的错误,这使我认为我无法使用此解决方案访问上面定义的变量。
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-10-0246293b959d> in on_button_clicked(b)
42 with output:
43 print("Button clicked.")
---> 44 df.to_excel("~/Downloads/df.xlsx")
45
46
NameError: name 'df' is not defined
我read something关于嵌套功能,但是我不确定那是我想要的。
编辑 这是完整的代码:
kpi = [k for k in canali_weekly.columns]
dropdown_canali = widgets.Dropdown(options = crea_opzioni_con_ALL(canali_weekly.index.get_level_values(level=0)), description='Canali:')
select_metriche = widgets.SelectMultiple(options=kpi, value= kpi, rows=5, description='Metriche:')
download_dataframe = widgets.Button(description='Scarica i dati', icon='check')
def filtra_dati(selezione, canale, metrica):
output.clear_output()
if canale == "ALL":
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), list(metrica)]
else:
df = canali_weekly.loc[(canale, slice(selezione[0],selezione[1])), list(metrica)]
with output:
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
display(df)
def on_button_clicked(b):
with output:
print("Button clicked.")
df.to_excel("~/Downloads/df.xlsx")
def week_eventhandler(change):
filtra_dati(change.new, dropdown_canali.value, select_metriche.value)
def canali_eventhandler(change):
filtra_dati(intRange_week.value, change.new, select_metriche.value)
def metriche_eventhandler(change):
filtra_dati(intRange_week.value, dropdown_canali.value, change.new)
intRange_week.observe(week_eventhandler, names='value')
dropdown_canali.observe(canali_eventhandler, names='value')
select_metriche.observe(metriche_eventhandler, names='value')
download_dataframe.on_click(on_button_clicked)