Worflow将结果写入Python

时间:2017-10-06 21:41:47

标签: python excel csv

我在Python中运行了几个模拟。每个模拟都有结果数据:name, time, cost, error其中name是实际模拟的字符串,time是int变量,cost是numpy数组或每个模拟具有不同大小的列表,error是float变量。到目前为止,我总是只进行几次模拟。我将结果存储在单独的.txt文件中。但现在我需要运行多达100次模拟,我认为这是处理它的最佳时机:)。

我可以存储模拟结果,例如在字典中:

result = {"SimulationA": {"time": 458,"cost": [12.35, 1.15, 66, 85], "error": 2.45 }"SimulationB":{"time": 512,"cost": [12.35, 66], "error": 12.3 } }

如果可能,我想将所有内容写入具有以下结构的excel或csv文档:

enter image description here

结果示例:

enter image description here

你会推荐什么样的工作流程(我更喜欢简单的东西,计算时间等等并不重要)?非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

如果模拟的顺序没有改变,为什么不将信息存储在像[[time1,cost1,error1],[time2,cost2,error2],...]这样的numpy数组中,然后使用numpy将其保存为csv文件。然后你只需要在excel中打开文件即可。

简单的代码和excel中的结果图片。您可以随心所欲地在csv文件中包含标题,如果您更喜欢所显示的格式或在随机参数中交换100和3,也可以在excel中转​​置数据。对于列表,这也可能是最简单的,然后将数据转换为numpy数组以保存它。

https://imgur.com/EpGKlaK

import numpy as np

data = np.random.rand(100,3)

np.savetxt('test.csv',data,  delimiter=',')

答案 1 :(得分:1)

你花费的额外逗号是有问题的,所以我把它变成了管道。

result = {"SimulationA": {"time": 458,"cost": [12.35, 1.15, 66, 85], "error": 2.45 }, "SimulationB":{"time": 512,"cost": [12.35, 66], "error": 12.3 } }

keys = result.keys()

rows = [
    ',' + ','.join(result.keys()),
    "time," + ','.join([ str(result[x]['time']) for x in keys]),
    "cost," + ','.join([ '|'.join([ str(y) for y in result[x]['cost']]) for x in keys]),
    "error," + ','.join([ str(result[x]['error']) for x in keys])
]

to_write = '\n'.join(rows)

with open('myfile.csv', 'w+') as f:
    f.write(to_write)