簡體   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