![](/img/trans.png)
[英]Python multiple file csv sum column, average for the week and average for the branch
[英]Take average of each column in multiple csv files using Python
我是Python的初学者。 我已经搜索了我的问题,但找不到确切的要求。
我有一个文件夹,其中每个实验测量都得到多个文件评分。 它们的名称遵循趋势,例如XY0001.csv
, XY0002.csv
... XY0040.csv
。 我想读取所有这些文件,并取所有文件中每一列的平均值,以相同格式存储在'result.csv'中。
我建议使用pandas( import pandas as pd
)。 我建议首先使用pd.read_csv()读取文件。 如何读取文件完全取决于您的CSV文件的格式,我不能从这里说出来。 如果要读取目录中的所有文件(这可能是解决此问题的最简单方法),请尝试使用读取所有文件 。
然后,您可以使用pd.concat()连接所有文件。 最后,您可以计算要生成的指标(使用搜索功能查找如何计算每个特定指标)。 一个为您做很多事情的好函数就是describe函数 。
要访问多个文件,可以使用glob
模块。
import glob
path =r'/home/root/csv_directory'
filenames = glob.glob(path + "/*.csv")
Python的pandas
模块具有解析csv文件的方法。 它还提供了一些选项来管理和处理csv文件。
import pandas as pd
dfs = []
for filename in filenames:
dfs.append(pd.read_csv(filename))
.read_csv()
方法用于解析csv文件。
pd.concat(dfs, ignore_index=True)
.concat()
用于将所有数据连接到一个数据帧中,并且易于处理。
下面利用glob
模块获取X*.csv
形式的当前文件夹中所有文件的列表,即以x
开头的所有CSV文件。 对于找到的每个文件,它首先跳过标题行(可选),然后使用zip()
技巧加载所有剩余的行,以将行列表转置为列列表。
对于每一列,它将每个单元格转换为整数并求和,然后将这些总数除以找到的元素数,从而得出每一列的平均值。 然后,它将值以filename, av_col1, av_col2
等格式写入到输出result.csv
中:
import glob
import csv
with open('result.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
for filename in glob.glob('X*.csv'):
print (filename)
with open(filename, newline='') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input)
averages = []
for col in zip(*csv_input):
averages.append(sum(int(x) for x in col) / len(col))
csv_output.writerow([filename] + averages)
因此,如果您的XY0001.csv
包含:
Col1,Col2,Col3
6,1,10
2,1,20
5,2,30
result.csv
将编写如下:
XY0001.csv,4.333333333333333,1.3333333333333333,20.0
使用Python 3.5.2测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.