2016-04-11 2 views
1

[введите описание изображения здесь] [1] [введите описание изображения здесь] [2] У меня есть файл CSV с 14 категориями с 303 строками Мне нужно найти сумму для каждой категории. Что я до сих пор, к сожалению, не очень помогает в том, как найти сумму каждой категории по отдельности и сокращенно 14 категорий в порядке возраста, gen, cpt, rbp, sc, fbs, rer, mhra, eia, с.о., SPSD, NMV, дт, HDКак получить суммы в CSV-файле python

import string 
with open("train.csv", "r") as f: 
    for hd in f.read():13 

первые несколько строк, как это

ABCDE ф GHIJKLMN

63 1 1 145 233 1 2 150 0 2,3 3 0 6 0

67 1 4 160 286 0 2 108 1 1,5 2 3 3 2

67 1 4 120 229 0 2 129 1 2,6 2 2 7 1

+2

Я думаю, вы имеете в виду csv-файл, правильно? – idjaw

+0

да я имел в виду csv – Dandy

+0

, как выглядит файл? –

ответ

0

Вы можете карту каждый ряд поплавка, транспозиции и сумму каждый столбец делая Dict с (column_name, column_sum) спариваний:

import csv 

with open("train.csv", "r") as f: 
    r = csv.reader(f) 
    # pull first row i.e A,B,C,D... to use ad the keys 
    keys = next(r) 
    # iterate ober the rows mapping to float and transpose 
    # with zip(*... so rows become columns, one per key 
    summed_dict = dict(zip(keys, map(sum, zip(*(map(float, row) for row in r))))) 

Для вашего ввода образца:

A,B,C,D,E,f,G,H,I,J,K,L,M,N 
63,1,1,145,233,1,2,150,0,2.3,3,0,6,0 
67,1,4,160,286,0,2,108,1,1.5,2,3,3,2 
67,1,4,120,229,0,2,129,1,2.6,2,2,7,1 

Выходы:

{'K': 7.0, 'D': 425.0, 'B': 3.0, 'G': 6.0, 'f': 1.0, 'N': 3.0, 'M': 16.0, 'C': 9.0, 'A': 197.0, 'E': 748.0, 'L': 5.0, 'H': 387.0, 'I': 2.0, 'J': 6.4} 

Вы можете использовать DictReader, но здесь нет никаких реальных преимуществ.

+0

ok sweet спасибо, что это помогает, хотя просто чтобы убедиться, что я получаю его ключи = next (r) is что делает код продолжением после запуска в столбце A? Правильно ли? – Dandy

+0

@Dandy, когда вы смотрите на файл 'next (r)' pull A, B, C, D, E, F, G, H, I, J, K, L, M, N, поэтому они являются ключами/columns, то каждая строка для строки в r - это остальные строки 63,1, 145 и т. д. zip (* ...) переносится, поэтому в основном мы принимаем значения по вертикали/столбцу, а не по строкам, так что каждый ключ соответствует до суммы значений ниже этого –

0

Python имеет действительно полезный модуль «csv».

import csv 

with open("train.csv", "r") as f: 
    reader = csv.reader(f) 
    for row in reader: 
     # work on each row as a list 

Существует также удобный DictReader, который анализирует первую строку CSV в качестве заголовков строк, а затем дает каждую строку в качестве словаря с установленными ключами к коллекторам.

Теперь, когда данные находятся в удобном для употребления формате, суммирование должно быть простым.

-1

Numpy может быть вашим другом:

import numpy as np 

# load array from csv 
arr = np.loadtxt('data.csv', dtype=float, delimiter=';', skiprows=0) 

n = -1 
# get n-th row by fany indexing 
row = arr[n,:] 
print row 
print np.sum(row) 

m = 2 
# get m-th col by fancy indexing 
col = arr[:,m] 
print col 
print np.sum(col) 

это в значительной степени само за себя. для получения дополнительной информации: read the docs

+0

им не уверен, что делает numpy. Мне сказали, что он упрощен, но я посмотрю, что это кажется полезным. – Dandy

+0

, если вы хотите делать числовые операции над значениями, хранящимися в файле csv (который я предположил, потому что вы запросили сумму категории/столбца), numpy - это путь. Он в основном реализует многомерные, статически типизированные массивы. на самом деле он частично реализован в C, поэтому он также очень тихий, но – rikisa

+0

@Dandy, numpy не входит в стандартную библиотеку, вам нужно будет установить его, если у вас большие массивы данных numpy очень эффективны, но для файла с 300-строчным чистым питоном будет более чем достаточно, –

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