在每个迭代步骤后将计算数据写入 txt/csv
Posted
技术标签:
【中文标题】在每个迭代步骤后将计算数据写入 txt/csv【英文标题】:Writing computed data to a txt/csv after each iterations step 【发布时间】:2020-02-15 10:35:08 【问题描述】:考虑以下简单示例:
x1, x2, x3, x4 = 0, 0, 0, 0
index = 0
for i in range(3):
index += 1
x1 += 2
x2 += 2
x3 += 2
x4 += 2
如何创建一个 txt 或 csv 文件,在每次迭代后将 x1、x2、x3、x4 和索引存储在单独的列中(总共 5 个)。是否也可以给每列一个标题?
最终结果应该是这样的
Index Data1 Data2 Data3 Data4
1 2 2 2 2
2 4 4 4 4
3 6 6 6 6
将存储的数据很好地分开很重要,因为它稍后将用于另一个计算。如果具有存储值的变量称为“data_”,我想应用切片操作,例如data_[:,0] = [1,2,3]。
编辑: @abc 我试过你的方法,但它不起作用
import pandas as pd
from numpy import array
index = 0
for i in range(3):
index += 1
x1 += 2
x2 += 2
x3 += 2
compact = [[index, x1, x2, x3]]
pd.DataFrame(compact, columns= ['Index','Data1','Data2','Data3']).to_csv('example.csv',index=False)
example.csv 文件只会获取最后的计算值,例如
在我的实际程序中,不可能先存储所有计算值(10^6 次迭代),然后才能保存它们。每次迭代后都需要存储这些值!
【问题讨论】:
你试过pandas.to_csv()
吗?
【参考方案1】:
你需要的是熊猫:
Import pandas as pd
Import os
x1, x2, x3, x4 = 0, 0, 0, 0
index = 0
Index,Data1,Data2,Data3,Data4=[],[],[],[],[]
for i in range(3):
index += 1
x1 += 2
x2 += 2
x3 += 2
x4 += 2
df=pd.DataFrame([index,x1,x2,x3,x4],columns=['Index','Data1','Data2','Data3','Data4'])
df.to_csv('data.csv',index=False,mode='a')
data.csv 文件:
Index,Data1,Data2,Data3,Data4
1,2,2,2,2
2,4,4,4,4
3,6,6,6,6
【讨论】:
@Miradius,根据您的编辑进行了编辑。它现在应该可以工作了。 我在 python 3.7.4 中尝试了您编辑的代码并得到以下错误: ValueError: Shape of passed values is (5, 1), indices imply (5, 5)【参考方案2】:您可以为此使用pandas。这假设拥有所有数据。示例。
res = [[1,2,2,2,2],[2,4,4,4,4]]
pd.DataFrame(res, columns=['Index','Data1','Data2','Data3','Data4']).to_csv('example.csv',index=False)
如果您想在每次迭代后存储新行,您可以做的是:
with open('res.csv','w') as f:
f.write('Index,Data1,Data2,Data3\n')
# for each iteration
# compute new row
f.write(",".join(map(str,row)))
f.write("\n")
【讨论】:
以上是关于在每个迭代步骤后将计算数据写入 txt/csv的主要内容,如果未能解决你的问题,请参考以下文章