gpt4 book ai didi

python - 计算多个文件的平均值

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:49 24 4
gpt4 key购买 nike

我是 Python 的新手,我也进行了很多搜索以找到与我类似的问题。我想做类似这个问题中解释的事情 Computing averages of records from multiple files with python

但是,我不想取每个值的平均值(如本例中所有值都是数字)我想取单个列的平均值,但对其他列保留所有相同的值"

例如:

fileA.txt:  
0.003 0.0003 3 Active
0.003 0.0004 1 Active

fileB.txt:
0.003 0.0003 1 Active
0.003 0.0004 5 Active

我想生成以下输出文件

output.txt
0.003 0.0003 2 Active
0.003 0.0004 3 Active

虽然第 1 列和第 2 列也是数字,但对于 100 个文件中的相同位置,它们将是相同的值。所以我只对第 3 列的 100 个文件中每个元素的平均值感兴趣。

此外,虽然问题中的代码Computing averages of records from multiple files with python用于阅读我的文件。如果你有很多文件,它就没有用了。我该如何优化它?

我设法使用以下代码读取我的文件:

import numpy as np

result = []
for i in my_files:
a = np.array(np.loadtxt(i, dtype = str, delimiter = '\t', skiprows = 1))
result.append(a)
result = np.array(result)

我使用了这个问题 initialize a numpy array 中建议的类似代码

我的每个文件每 4 列大约有 1500 行。我尝试使用 np.mean 但它不起作用可能是因为我的一些数据是字符串类型。

预先感谢您的帮助!

最佳答案

如果您使用 np.genfromtxt(..., dtype=None) 加载数组,则 genfromtxt 将猜测每一列的 dtype。例如,第三列将被赋予一个整数数据类型。这将使您的数组适合算术。使用 dtype='str' 会产生一个字符串数组,这不适合算术运算。


import csv
import numpy as np
import itertools as IT
my_files = ['fileA.txt', 'fileB.txt']

vals = None
for num, filename in enumerate(my_files, 1):
arr = np.genfromtxt(filename, dtype=None, delimiter='\t', skiprows=1, usecols=(2,))
print(arr)
if vals is None:
vals = arr
else:
vals += arr

meanvals = vals / num

with open(my_files[0], 'rb') as fin, open('/tmp/test.csv', 'wb') as fout:
# skip first row
next(fin)
writer = csv.writer(fout, delimiter='\t', lineterminator='\n')
for row, val in IT.izip(csv.reader(fin, delimiter='\t'), meanvals):
row[2] = val
writer.writerow(row)

/tmp/test.csv 中的结果如下所示:

0.003   0.0003  2   Active
0.003 0.0004 3 Active

关于python - 计算多个文件的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com