2014-09-10 2 views
-3

У меня есть CSV-файл с 2 колонкамиКак получить среднее из двух столбцов в CSV-файле

rw1, 24 
rw2, 34 
rw3, 56 
rw1, 78 
rw2, 56 
rw2, 45 
rw2, 64 
rw3, 32 
rw1, 28 

Теперь я хочу, чтобы иметь average.py файл, который вычисляет среднее значение всех RW1, RW2 и RW3 соответственно и писать что в файл average.txt

rw1 - average value, 
rw2 - average value, 
rw3 - average value 
+4

Пожалуйста, сообщите ваши попытки решить эту проблему и объяснить, почему этого недостаточно. – wwii

+0

https://docs.python.org/2/library/csv.html и с циклом вы можете рассчитать свои средние значения ... – Synoon

ответ

0

данные считаются csv и преобразуются в кортеж. затем sort их использовать в Groupby

import itertools 
import csv 

fileLocation = 'newslot.csv' 
with open(fileLocation,'rb') as f: 
    r = csv.reader(f) 
    lis=sorted([(i[0],i[1]) for i in r]) 
    for k,g in itertools.groupby(lis,key=lambda x:x[0]): 
     g=list(g) 
     print k,sum(int(i[1]) for i in g)/len(g) 
0
from itertools import groupby 
from operator import itemgetter 
import csv 

def avg(lst): 
    return sum(map(float, lst))/len(lst) 

def avgcsv(filename, k=0, v=1): 
    with open(filename) as f: 
     data = sorted(csv.reader(f, skipinitialspace=True), key=itemgetter(k)) 
    return ['%s - %g' % (name, avg(map(itemgetter(v), group))) 
      for name, group in groupby(data, key=itemgetter(k))] 

with open('average.txt', 'w') as f: 
    f.write(',\n'.join(avgcsv('filename', 0, 1))) 

Выхода

rw1 - 43.3333, 
rw2 - 49.75, 
rw3 - 44 
+0

вы преобразовали строку в целое? –

+0

@ sundarnatarajСундар nope, спасибо –

+0

и вы пропустили окончательную скобку, наконец, я думаю :) –

2

С pandas, это своего родом короткое:

import pandas as pd 
df = pd.read_csv(file, header=None) 

In [1]: df 
Out[1]: 
    0 1 
0 rw1 24 
1 rw2 34 
2 rw3 56 
3 rw1 78 
4 rw2 56 
5 rw2 45 
6 rw2 64 
7 rw3 32 
8 rw1 28 

In [2]: df.groupby(df[0]).mean() # it groups on the column "0", and calculates the mean on the different group 
Out[2]: 
      1 
0    
rw1 43.333333 
rw2 49.750000 
rw3 44.000000 

Надеется, что это помогает!

Смежные вопросы