将模型输出追加到pd df行

时间:2018-08-08 20:01:03

标签: python pandas append pyomo

我正在尝试将Pyomo模型输出放入pandas.DataFrame行中。我现在通过将数据另存为.csv,然后将.csv文件读取为DataFrame来完成它。我想跳过.csv步骤,将输出直接放入DataFrame

当我用Pyomo完成优化解决方案时,最优分配是在1输出数据中的model.x[i](否则为0)。 model.x[i]dict中的v键索引。 model.xPyomo

的特定语法

Pyomo为表示最佳解决方案的每个值分配一个timeItem[i]platItem[i]payItem[i]demItem[i]v[i]0807results.csv文件会生成一个准确的最佳分配文件,显示每个文件的timeItem[i]platItem[i]payItem[i]demItem[i]v[i]的值最优解中的有效分配。

model.x[i]1时,如何直接获得timeItem[i]platItem[i]payItem[i]demItem[i]v[i]变成DataFrame?非常感谢您的协助。我当前的代码如下。

index=sorted(v.keys())
with open('0807results.csv', 'w') as f:
    for i in index:
        if value(model.x[i])>0:
            f.write("%s,%s,%s,%s,%s\n"%(timeItem[i],platItem[i],payItem[i], demItem[i],v[i]))

from pandas import read_csv      
now = datetime.datetime.now()
dtg=(now.strftime("%Y%m%d_%H%M"))
df = read_csv('0807results.csv')
df.columns = ['Time', 'Platform','Payload','DemandType','Value']
# convert payload types to string so not summed 
df['Payload'] = df['Payload'].astype(str)
df = df.sort_values('Time')
df.to_csv('results'+(dtg)+'.csv')
# do stats & visualization with pandas df

2 个答案:

答案 0 :(得分:0)

我不知道您发布的代码中timeItem等可迭代项中的内容。但是,我怀疑类似的内容:

import pandas as pd
results = pd.DataFrame([timeItem, platItem, payItem, demItem, v], index=["time", "plat", "pay", "dem", "v"]).T

会工作的。

如果要在1中的model.x上进行过滤,则也可以将其添加为列,并直接使用pandas进行过滤:

import pandas as pd
results = pd.DataFrame([timeItem, platItem, payItem, demItem, v, model.x], index=["time", "plat", "pay", "dem", "v", "x"]).T
filtered_results = results[results["x"]>0]

答案 1 :(得分:0)

您还可以使用DataFrame.from_records()函数:

def record_generator():
    for i in sorted(v.keys()):
        if value(model.x[i] > 1E-6):  # integer tolerance
            yield (timeItem[i], platItem[i], payItem[i], demItem[i], v[i])

df = pandas.DataFrame.from_records(
    record_generator(), columns=['Time', 'Platform', 'Payload', 'DemandType', 'Value'])