Выполнение вычислений в файле с разделителями табуляцией

Я все еще изучаю Python и до сих пор не знаю, как работать с массивами.

Я хочу прочитать файл с разделителями табуляции, например (но в моем случае у меня будет около 400 строк):

  Col1      Col2
  0.0001    0.6
  0.0001    0.5
  0.000006  0.8
  0.0001    0.0003
  0.002     1
  0.002     3

Я хочу получить следующий вывод:

Col1      Col2
0.0001    0.36676667
0.000006  0.8
0.002     2

Поэтому я хочу сохранить одно и то же значение в Col1, но взять среднее значение в Col2, которое соответствует тому же значению в Col1.

Я могу прочитать массив, используя:

  arr = np.genfromtxt('test.csv', dtype=None, delimiter='\t', skiprows=1)

но я не знаю, как сделать эти операции и создать новый файл с новыми сгенерированными данными.

Большое спасибо за любую помощь!


person Fabs    schedule 23.07.2013    source источник


Ответы (1)


Используйте collections.defaultdict с list в качестве аргумента по умолчанию.

Возьмите значение из первого столбца в качестве ключа и добавьте второе значение.

import csv
from collections import defaultdict

# Gather the data from the CSV file
d = defaultdict(list)
with open('data.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter='\t')
    for row in reader:
        d[float(row[0])].append(float(row[1]))

# Print the mean.
for k in d.keys():
    print k, sum(d[k])/len(d[k])
person Roland Smith    schedule 23.07.2013
comment
Спасибо! но я получаю следующее сообщение об ошибке: ValueError: недопустимый литерал для float(): 0,0001 0,6 Любая идея, почему? - person Fabs; 24.07.2013
comment
@Fabs: вам, вероятно, придется установить разделитель в csv.reader. - person Roland Smith; 24.07.2013
comment
Это сработало! Спасибо! Как классно было ответить! Надеюсь, однажды я узнаю все эти функции Python! :) - person Fabs; 24.07.2013
comment
@Fabs: сохраните ссылку на документацию по стандартной библиотеке в избранном браузера. :-) - person Roland Smith; 24.07.2013