M.var["w"].to_pandas() does not work

def MAD_revisited(Risk_aversion,R_min,R_max,G_max,G_min):
m = AMPL()
m.read(“mad_portfolio_risk_adjusted.mod”)

    m.set["ASSETS"] = list(assets.columns)
    m.set["TIME"] = weekly_returns.index
    m.param["weekly_returns"] = weekly_returns
    m.param["mean_return"] = mean_return
    #ampl.getParameter("daily_returns").setValues(daily_returns_train.stack())
    #ampl.getParameter("mean_return").setValues(mean_return_train)
    m.param["R_min"] = R_min
    m.param["R_max"] = R_max
    m.param["G_min"] = G_min
    m.param["G_max"] = G_max
    m.param["risk_aversion"] = Risk_aversion
    m.param["w_lb"] = 0
    m.param["w_ub"] = 0.2
    m.param["R"] = 0.001
    m.option["solver"] = SOLVER
    #m.eval( "display R_max-R_min, G_max-G_min;" )
    m.solve()
    #ampl.var["w"].to_pandas()
    #ampl.get_data("w").to_pandas().plot.barh()
    #m.get_data["w"].to_pandas()
    #weights_df_final = m.get_data("w").to_pandas().plot.barh()
    weight_pandas=m.get_data("w").to_pandas()
    s=m.var["w"].to_pandas()
    return s

then I call
for Risk_aversion,R_min,R_max,G_max,G_min in zip(Risk_aversion,R_min,R_max,G_max,G_min):
ampl = MAD_revisited(Risk_aversion,R_min,R_max,G_max,G_min)
I want weights as pandas dataframe format for each iteration,weights_df_final = m.get_data(“w”).to_pandas().plot.barh() this works,but I want data format

The code:

s=m.var["w"].to_pandas()
return s

seems correct. Were you expecting the pandas dataframe to be in a different shape?

You should be able to do:

df = MAD_revisited(Risk_aversion,R_min,R_max,G_max,G_min)
df.plot.barh()

in order to plot the pandas dataframe returned by that function.