Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将excel表中的数据正确分配给python/pyomo(具体模型)上的参数_Python_Pandas_Pyomo - Fatal编程技术网

如何将excel表中的数据正确分配给python/pyomo(具体模型)上的参数

如何将excel表中的数据正确分配给python/pyomo(具体模型)上的参数,python,pandas,pyomo,Python,Pandas,Pyomo,我目前有一个具体的模型,包括以下几组: model.m = Set(initialize= ['m1', 'm2', 'm3', 'm4']) model.p = Set(initialize= ['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10',\ 'p11','p12','p13','p14','p15','p16','p17','p18','p19',\

我目前有一个具体的模型,包括以下几组:

model.m = Set(initialize= ['m1', 'm2', 'm3', 'm4'])
model.p = Set(initialize= ['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10',\
                           'p11','p12','p13','p14','p15','p16','p17','p18','p19',\
                               'p20','p21','p22','p23','p24'])
我使用pandas读取excel数据:

df = pd.read_excel('data.xls', sheet_names= 'data1', )
df.head()
现在我尝试将数据分配给参数:

model.E1 = Param(model.m, model.p, initialize = df.iloc[0:4,1:25].values)
它可以很好地分配值(我已经使用“打印”进行了检查),但是当我尝试时:

print(model.E1['m1', 'p2'])

它打印所有m和p的所有值,而不是[m1,p2]的值。这意味着参数无法区分与集合相关的值。有人能告诉我如何正确执行吗?

这可能是因为
df.iloc[0:4,1:25].values
提供了一个numpy数组,而不是字典。据我所知,Pyomo使用字典来初始化参数,并从字典键在每个索引处解释参数的值

对于model.m X model.p中的所有索引,初始化的参数需要看起来像
{('m1','p1'):val1,('m1','p2'):val2,…}


否则,Pyomo假设传递给
initialize
的numpy数组是每个索引所需要的。它无法从一个numpy数组中分辨出要分配给哪个索引的值。

回答了我自己的问题

从excel中读取数据后:

创建一个空字典:

Dict1 = dict()
  model.E = Param(model.m, model.p, initialize = Dict1)
迭代行(用m表示)和列(用p表示),并用值填充空字典:

   for m in df.index:
        for p in df.columns:
            Dict1[m, p] = float(df[p][m])
注意,m和p是临时指标;它们可以替换为行、列或任何您希望用以表示它们的内容。相反,df.index表示行标题,df.columns表示列标题

使用相关字典初始化参数:

Dict1 = dict()
  model.E = Param(model.m, model.p, initialize = Dict1)
通过打印参数中的值进行测试:

print(model.E['m1', 'p2'])

请包括所有
import
行,因为我们无法访问
data.xls