2016-11-22 2 views
0

Я новичок в Python. Я искал свою проблему, но не смог найти точное требование.Взять среднее значение для каждого столбца в нескольких файлах csv с помощью Python

У меня есть папка, в которой есть несколько файлов, забитых для каждого экспериментального измерения. Их имена следуют тенденции, например. XY0001.csv, XY0002.csv ... XY0040.csv. Я хочу прочитать все эти файлы и взять среднее значение каждого столбца во всех файлах, сохранив его в 'result.csv' в том же формате.

+0

Возможный дубликат [Импорт нескольких файлов csv в pandas и объединение в один DataFrame] (http://stackoverflow.com/questions/20906474/import-multiple-csv-files-into-pandas-and-concatenate-into- один-dataframe) – Guido

ответ

1

Я предлагаю использовать панды (import pandas as pd). Предлагаю начать с чтения файла, используя pd.read_csv(). Как читать файлы в точности зависит от того, как отформатированы ваши файлы CSV, я не могу сказать, что отсюда. Если вы хотите прочитать все файлы в каталоге (который может быть самым простым решением для этой проблемы), попробуйте использовать read all files.

Затем вы можете объединить все файлы, используя pd.concat(). Наконец, вы можете вычислить метрики, которые вы хотите сгенерировать (используйте функцию поиска, чтобы найти, как вычислить каждую конкретную метрику). Хорошая функция, которая делает много вещей для вас, - describe function.

0

Следующий модуль использует список 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 будет записана следующим образом:

XY0001.csv,4.333333333333333,1.3333333333333333,20.0 

Протестировано с использованием Python 3.5.2

0

Для доступа к нескольким файлам вы можете использовать модуль glob.

import glob 

path =r'/home/root/csv_directory' 
filenames = glob.glob(path + "/*.csv") 

pandas модуль Python имеют метод для разбора файла 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() используется для конкатенации всех данных в одном dataframe и его легко обрабатывать.