我正在研究一种方法来平均来自多个文件的数据并将结果放入一个文件中。文件的每一行看起来像:
档案#1
Test1,5,2,1,8
Test2,10,4,3,2
...
档案#2
Test1,2,4,5,1
Test2,4,6,10,3
...
以下是我用来存储数据的代码:
totalData = []
for i in range(0, len(files)):
data = []
if ".csv" in files[i]:
infile = open(files[i],"r")
temp = infile.readline()
while temp != "":
data.append([c.strip() for c in temp.split(",")])
temp = infile.readline()
totalData.append(data)
所以我留下的是totalData,如下所示:
totalData = [[
[Test1,5,2,1,8],
[Test2,10,4,3,2]],
[[Test1,2,4,5,1],
[Test2,4,6,10,3]]]
我想要平均的是所有Test1,Test2等,平均所有第一个值,然后是第二个值,依此类推。所以testAverage看起来像:
testAverage = [[Test1,3.5,3,3,4.5],
[Test2,7,5,6.5,2.5]]
我努力想到一种简洁/有效的方法来做到这一点。任何帮助是极大的赞赏!此外,如果有更好的方法来管理此类数据,请告诉我们。
答案 0 :(得分:1)
首先将其压扁
results = itertools.chain.from_iterable(totalData)
然后对其进行排序
results.sort()
然后使用groupby
data = {}
for key,values in itertools.groupby(results,lambda x:x[0]):
columns = zip(*values)
data[key] = [sum(c)*1.0/len(c) for c in columns]
最后只需打印data
答案 1 :(得分:1)
它只需要两个循环
totalData = [ [['Test1',5,2,1,8],['Test2',10,4,3,2]],
[['Test1',2,4,5,1],['Test2',4,6,10,3]] ]
for t in range(len(totalData[0])): #tests
result = [totalData[0][t][0],]
for i in range(1,len(totalData[0][0])): #numbers
sum = 0.0
for j in range(len(totalData)):
sum += totalData[j][t][i]
sum /= len(totalData)
result.append(sum)
print result
答案 2 :(得分:0)
如果您的数据结构是常规的,最好的可能就是使用numpy。您应该可以使用终端
中的pip安装它pip install numpy
然后在python:
import numpy as np
totalData = np.array(totalData)
# remove the last dimension (i.e. 'Test1', 'Test2'), since it's not a number
totalData = np.array(totalData[:, :, 1:], float)
# average
np.mean(totalData, axis=0)