首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Pyomo变量的结果导出到Pandas dataframe和excel中?

如何将Pyomo变量的结果导出到Pandas dataframe和excel中?
EN

Stack Overflow用户
提问于 2020-03-10 15:22:30
回答 1查看 1.6K关注 0票数 1

我在一个模型中有几个Pyomo变量,其中一些有三个指数。为了解释,我的一个变量是

代码语言:javascript
运行
复制
model.E_grid = Var(model.i, model.m, model.p, within = NonNegativeReals)

这三个指数是i,m和p。在运行模型之后,我希望看到E_grid与熊猫数据中每一个i、m和p的最终值(这将允许我将其导出到excel)。例如,i1,m1,p1,21.00,i1,m1,p2,22.00等等。我已经看到了“块”方法,它尝试一次导出所有变量(例如https://or.stackexchange.com/questions/2708/pyomo-looping-over-a-variable-method),但是它对我不起作用,因为其中一些变量只有一个索引。任何帮助,这将是非常感谢!

编辑:这就是我特别尝试过的

代码语言:javascript
运行
复制
results_df = pd.DataFrame()
for v in model.component_objects(model.E_grid, active=True):
    for i, m, p in v:
        results_df.at[i,m,p, v.name] = value(v[i,m,p])

print(results_df) 

但是我得到了错误ValueError:没有足够的标量访问索引器(设置)!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-17 10:53:41

component_objects()的第一个参数应该是组件类型(例如。( Var),而不是组件(即model.E_grid)。您可以使用.items()IndexedComponent上迭代。

其次,您所看到的错误是由于对数据进行索引和动态设置值的方式。如果您只是想从变量值构建一个数据框架,那么只使用dict理解,然后使用pandas的dataframe构造函数可能要简单得多:

代码语言:javascript
运行
复制
import pandas as pd
from pyomo.core import ConcreteModel, Set, NonNegativeReals, Var, value

model = ConcreteModel()
model.i = Set(initialize=[1, 2, 3])
model.m = Set(initialize=[4, 5, 6])
model.p = Set(initialize=[7, 8, 9])

model.E_grid = Var(model.i, model.m, model.p, within=NonNegativeReals, initialize=1)

E_grid_data = {(i, m, p, v.name): value(v) for (i, m, p), v in model.E_grid.items()}
df = pd.DataFrame.from_dict(E_grid_data, orient="index", columns=["variable value"])
print(df)
#                           variable value
# (1, 4, 7, E_grid[1,4,7])               1
# (1, 4, 8, E_grid[1,4,8])               1
# (1, 4, 9, E_grid[1,4,9])               1
# (1, 5, 7, E_grid[1,5,7])               1
# (1, 5, 8, E_grid[1,5,8])               1
# (1, 5, 9, E_grid[1,5,9])               1

如果要将索引拆分为多个索引,现在可以对数据进行后处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60620691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档