使用Python获取多个csv文件中每列的平均值

时间:2016-11-22 05:28:09

标签: python csv data-analysis

我是Python的初学者。我搜索了我的问题,但找不到确切的要求。

我有一个文件夹,其中每个实验测量都有多个文件得分。他们的名字遵循一个趋势,例如XY0001.csvXY0002.csv ... XY0040.csv。我想阅读所有这些文件并获取所有文件中每列的平均值,并以相同的格式将其存储在'result.csv'中。

3 个答案:

答案 0 :(得分:2)

我建议使用pandas(str)。我建议先使用pd.read_csv()阅读文件。如何准确读取文件取决于您的CSV文件的格式,我不知道从这里。如果要读取目录中的所有文件(这可能是解决此问题的最简单方法),请尝试使用read all files

然后,您可以使用pd.concat()连接所有文件。最后,您可以计算要生成的指标(使用搜索功能查找如何计算每个特定指标)。为你做很多事情的一个很好的功能是describe function

答案 1 :(得分:1)

要访问多个文件,您可以使用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()用于将所有数据连接到一个数据框中,并且易于处理。

答案 2 :(得分:0)

以下内容使用mkvirtualenv --python=python3.5 env_name 模块获取表单glob当前文件夹中所有文件的列表,即以X*.csv开头的所有CSV文件。对于它找到的每个文件,它首先跳过标题行(可选),然后使用x技巧加载所有剩余行,以将行列表转换为列列表。

对于每一列,它将每个单元转换为一个整数并对这些值求和,将该总和除以找到的元素数,从而得出每列的平均值。然后,它以zip()等格式将值写入输出result.csv

filename, av_col1, av_col2

所以如果你有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

使用Python 3.5.2进行测试