![](/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.