2017-01-23 2 views
0

Ich benutze einen Raspberry Pi, um Wetterdaten zu sammeln, und es geht so gut. Alle gesammelten Daten werden in einer kommagetrennten TXT-Datei gespeichert.Hinzufügen aller Werte in einer bestimmten Spalte in Python

Jetzt möchte ich die durchschnittliche Temperatur von diesen gesammelten Daten erhalten, deshalb muss ich alle Einträge einer bestimmten Spalte zusammenfügen.

hier ein Teil der gesammelten Daten ist, ist die zweite Spalte oder Index [1] die erfassten Temperaturdaten:

00:00,1.5,1025,100,1.5,Yes 
01:00,2.0,1025,100,2.0,Yes 
02:00,2.5,1025,100,2.5,Yes 
03:00,2.7,1025,100,2.7,Yes 
04:00,2.8,1025,100,2.8,Yes 
05:00,3.0,1025,100,3.0,Yes 
06:00,3.7,1025,100,3.7,Yes 
07:00,4.1,1024,100,4.1,Yes 
08:00,4.2,1025,100,4.2,Yes 
09:00,4.6,1026,100,4.6,Yes 
10:00,5.9,1026,100,5.9,Yes 
11:00,6.3,1026,100,6.3,Yes 
12:00,6.8,1026,100,6.8,Yes 
13:00,7.9,1026,100,7.9,Yes 
14:00,8.1,1026,100,8.1,Yes 
15:00,7.8,1026,100,7.8,Yes 
16:00,6.8,1026,100,6.8,Yes 
17:00,5.8,1027,100,5.8,Yes 
18:00,5.0,1027,100,5.0,Yes 
19:00,4.7,1028,100,4.7,Yes 
20:00,4.0,1028,100,4.0,Yes 
21:00,3.7,1028,100,3.7,Yes 
22:00,3.5,1028,100,3.5,Yes 
23:00,4.0,1029,100,4.0,Yes 
23:59,2.8,1029,100,2.8,Yes 

Hier ist der Beispielcode, der ich versucht wurden zu verwenden, um den Durchschnitt zu erhalten Temp, aber es hält einen Fehler werfen:

#Adding all values in a columns 
AvTemp = 0 
with open(YdPath + yFileDate + '.txt', 'r') as AvgTemp: 
    for line in AvgTemp: 
     line = line.strip().split(',') 
     AvTemp += sum(int(line[1])) 
     print AvTemp 

Hier ist der Fehler:

AvTemp += sum(int(line[1])/25) 
ValueError: invalid literal for int() with base 10: '1.5' 

so I kann sehen, dass der Eintrag eine Dezimalstelle verursacht den Fehler, weil es keine Ganzzahl ist, aber ich bekomme immer noch einen Fehler, auch wenn ich den int Teil entfernen.

Jede Hilfe wäre

Dank

UPDATE nach dem Versuch, verschiedene Tipps

Nach dem Versuch, die verschiedenen Tipps und Antworten geschätzt werden hinzugefügt Ich bin immer noch nicht das erforderliche Ergebnis zu bekommen. Grundsätzlich brauche ich nur das tatsächliche Endergebnis zu drucken, d. H. Die Summe von index[1] entspricht 114,2, dann wird diese durch die Nummer len der Zeilen geteilt, in diesem Fall 25, um ein Ergebnis von 4,568 zu ergeben.

diese verschiedenen Hilfe-Tipps Mit dieser zur Zeit ist das, was auf dem Bildschirm ausgegeben wird:

1.5 
3.5 
6.0 
8.7 
11.5 
14.5 
18.2 
22.3 
26.5 
31.1 
37.0 
43.3 
50.1 
58.0 
66.1 
73.9 
80.7 
86.5 
91.5 
96.2 
100.2 
103.9 
107.4 
111.4 
114.2 

Sie können sehen, dass es jede Zeile mit der Zugabe der letzten Ausdrucken hält vor dem endgültigen Gesamt Kommen 114.2. (Ich habe den Divisionsteil hier weggelassen). Ich möchte wirklich nicht, dass alle anderen Zeilen gedruckt werden. Ich nehme an, es ist ein break benötigt irgendwo vielleicht?

+1

Versuch 'AvTemp + = Summe (float (Linie [1]))' – EdChum

+1

Mögliche Duplikat von [ Fügen Sie alle Werte in einer CSV-Spalte in Python] (http://stackoverflow.com/questions/10657965/add-all-values-in-a-csv-column-in-python) –

Antwort

1

Die Linie [1] ist ein einzelner Wert, die Summe (int (line [1])) macht keinen Sinn. Ersetzen

AvTemp += sum(int(line[1])) 

mit

AvTemp += float(line[1]) 

Dies sollte Ihnen die Gesamtsumme geben und dann können Sie es im Durchschnitt.

Der vollständige Code ist:

with open(YdPath + yFileDate + '.txt', 'r') as AvgTemp: 
    for line in AvgTemp: 
     line = line.strip().split(',') 
     AvTemp += float(line[1]) 
print AvTemp 

Sie können auch auf diese Frage suchen versuchen: Read specific columns from a csv file with csv module?

+0

Dies kommt näher, obwohl es schließlich zeigt die Spalte insgesamt zuerst druckt alle kumulativen Einträge nacheinander. Ich versuche, nur das Endergebnis zu drucken, d. H. 114.2 (die Summe aller Einträge in Index [1]) – 1cm69

+1

Siehe meine aktualisierte Frage – 1cm69

1

Guss es float, wie:

for line in AvgTemp: 
    line = line.strip().split(',') 
    AvTemp += sum(float(line[1])) 
print AvTemp 

Sie können Werte anhängen, um eine Liste und die Summe später wie:

tot = [] 
for line in AvgTemp: 
    line = line.strip().split(',') 
    value = float(line[1]) 
    tot.append(value) 
#sum values 
total = sum(tot) 
+1

Dieser Code gibt einen Fehler: AvTemp + = sum (float (line [1])) TypeError: Objekt 'float' ist nicht iterierbar –

+0

Danke, aber dies druckt immer noch jeden Wert kumulativ, dh jeder gedruckte Eintrag ist das Hinzufügen der aktuellen Zeile zu allen vorherigen Zeilen in der Spalte und die Ausgabe, die unter Verwendung der Daten angezeigt wird, ist: '1.5 6.0 8.7 11,5 14,5 18,2 22,3 26,5 31,1 37,0 43,3 50,1 58,0 66,1 73,9 80,7 86,5 91,5 96,2 100,2 103.9 107.4 111.4 114.2' – 1cm69

+1

@ 1cm69 Sie sind innerhalb von for Schleife drucken, daher solche Ausgabe, drucken Sie die gesamte aus für Schleife –

Verwandte Themen