Muszę wiedzieć, jak sumować wszystkie liczby kolumny w pliku CSV.

Na przykład. Moje dane wyglądają tak:

column  count   min max sum mean
80  29573061    2   40  855179253   28.92
81  28861459    2   40  802912711   27.82
82  28165830    2   40  778234605   27.63
83  27479902    2   40  754170015   27.44
84  26800815    2   40  729443846   27.22
85  26127825    2   40  701704155   26.86
86  25473985    2   40  641663075   25.19
87  24827383    2   40  621981569   25.05
88  24189811    2   40  602566423   24.91
89  23566656    2   40  579432094   24.59
90  22975910    2   40  553092863   24.07
91  22412345    2   40  492993262   22
92  21864206    2   40  475135290   21.73
93  21377772    2   40  461532152   21.59
94  20968958    2   40  443921856   21.17
95  20593463    2   40  424887468   20.63
96  20329969    2   40  364319592   17.92
97  20157643    2   40  354989240   17.61
98  20104046    2   40  349594631   17.39
99  20103866    2   40  342152213   17.02
100 20103866    2   40  335379448   16.6
#But it's separated by tabs

Kod, do którego do tej pory piszę:

import sys
import csv

def ErrorCalculator(file):
        reader = csv.reader(open(file), dialect='excel-tab' )

        for row in reader:
                PxCount = 10**(-float(row[5])/10)*float(row[1])


if __name__ == '__main__':
        ErrorCalculator(sys.argv[1])

W tym konkretnym kodzie muszę podsumować wszystkie liczby w PXCount i podzielić przez sumę wszystkich numerów w rzędzie [1] ...

Będę tak wdzięczny, jeśli powiem mi, jak sumować liczbę kolumny lub jeśli pomożesz mi w tym kodzie.

Również jeśli możesz dać mi wskazówka, aby pominąć nagłówek.

0
Geparada 27 wrzesień 2011, 00:49

3 odpowiedzi

Najlepsza odpowiedź

Możesz zadzwonić do "Reader.next ()" zaraz po instancji czytelnika, aby odrzucić pierwszą linię.

Aby sumować PXCount, wystarczy ustawić sum = 0 przed pętli i {x1}} po obliczeniu go dla każdego wiersza.

PS też pomocna jest CSV.DicTreader.

2
dkamins 26 wrzesień 2011, 20:56

Możesz zachować bieżącą sumę za pomocą "Przypisanie rozszerzone" + = :

total=0
for row in reader:
        PxCount = 10**(-float(row[5])/10)*float(row[1])
        total+=PxCount

Aby pominąć pierwszą linię (nagłówek) w pliku CSV:

with open(file) as f:
    next(f)  # read and throw away first line in f
    reader = csv.reader(f, dialect='excel-tab' )
2
unutbu 26 wrzesień 2011, 21:00

Używanie DictReader spowoduje osiągnięcie dalekiego kodu. Decimal da ci lepszą precyzję. Spróbuj również śledzić konwencje nazewnictwa Pythona i używać małych nazwisk dla funkcji i zmiennych.

import decimal

def calculate(file):
    reader = csv.DictReader(open(file), dialect='excel-tab' )
    total_count = 0
    total_sum = 0
    for row in reader:
        r_count = decimal.Decimal(row['count'])
        r_sum = decimal.Decimal(row['sum'])
        r_mean = decimal.Decimal(row['mean'])
        # not sure if the below formula is actually what you want
        total_count += 10 ** (-r_mean / 10) * r_count
        total_sum += r_sum
    return total_count / total_sum
1
patrys 26 wrzesień 2011, 21:25