繁体   English   中英

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

[英]Take average of each column in multiple csv files using Python

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

我有一个文件夹,其中每个实验测量都得到多个文件评分。 它们的名称遵循趋势,例如XY0001.csvXY0002.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM