2017-02-05 3 views
-1

Mein Logfile (Logfile.csv) sieht wie folgt aus:berechnen Mittelwert für alle N Minuten

2016-05-17 08:25 13.9 41.6 
2016-05-17 08:26 13.9 41.6 
2016-05-17 08:27 13.9 41.6 
2016-05-17 08:28 13.9 41.7 
2016-05-17 08:29 13.9 41.6 
2016-05-17 08:30 13.9 41.6 

1. Reihe Timestamp ist 2. Reihe ist Temperatur 3. Reihe ist Feuchtigkeit

Wie kann ich iterieren über den Linien, so dass ich Mittelwerte für Temperatur und Feuchtigkeit für jede N Minuten berechnen kann.

f = open("Logfile.csv","r") 
f_reader = csv.reader(f,delimiter="\t",dialect='excel-tab') 
for row in f_reader: 
     stringRowDate = row[0] 
     Date = datetime.datetime.strptime(stringRowDate,"%Y-%m-%d %H:%M") 
     floatTemp = float(row[1]) 
     floatHum = float(row[2]) 
     ... group N minutes and calculate mean values for floatTemp and floatHum 

Ich weiß, dass Pandas wahrscheinlich eine gute Option sein würde, aber ich würde einen csv Zusammenhang Ansatz

hier lieber was ich am Ende mit:

import csv 
from datetime import timedelta 
import datetime 

last_time = None 
temperatures = [] 
humidities = [] 

f = open("DataLogger.csv", "r+") 
f_reader = csv.reader(f,delimiter="\t",dialect='excel-tab') 
for row in f_reader: 
    current_time = datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M") 
    if last_time is None: 
     last_time = current_time 
    temperatures.append(float(row[1])) 
    humidities.append(float(row[2])) 
    if (current_time - last_time) > datetime.timedelta(minutes=10): 
     with open('/DataLoggerAVE.csv', 'a') as f: 
     x = csv.writer(f,dialect='excel-tab') 
     avetemp=temperature=sum(temperatures)/len(temperatures) 
     avehumidity=sum(humidities)/len(humidities) 
     x.writerow([current_time, avetemp, avehumidity]) 
     last_time = current_time 
     temperatures = [] 
     humidities = [] 

ich die Mittelwerte für jede erhalten Zeitintervall Ich definiere mit dem Timedelta für Feuchtigkeit und Temperaturen danke für die Hilfe

Antwort

1

Nun .. Verwenden Sie ein Timedelta, um die Zeit und eine Liste zu vergleichen Werte halten. Dann berechnen Sie den Durchschnitt wie folgt aus: sum(values)/len(values)

Hier ist ein Beispiel:

Aber bedenken Sie, dass dieser Ansatz nicht verbleibenden Daten umgehen kann, und erwartet, dass die Eingabe von Datum sortiert.

import csv 
import datetime 

f_reader = csv.reader(''' 
2016-05-17 08:25\t13.9\t41.6 
2016-05-17 08:26\t13.9\t41.6 
2016-05-17 08:27\t13.9\t41.6 
2016-05-17 08:28\t13.9\t41.7 
2016-05-17 08:29\t13.9\t41.6 
2016-05-17 08:30\t13.9\t41.6 
2016-05-17 08:31\t13.8\t41.5 
2016-05-17 08:32\t13.7\t41.6 
2016-05-17 08:33\t13.9\t41.6 
2016-05-17 08:34\t13.9\t41.7 
2016-05-17 08:35\t13.9\t41.6 
2016-05-17 08:40\t13.9\t41.6 
2016-05-17 08:34\t13.9\t41.8 
    '''.strip().splitlines(), delimiter='\t', dialect='excel-tab') 

last_time = None # keep track of the time 
temperatures = [] 
humidities = [] 

for row in f_reader: 
    current_time = datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M") 
    print(current_time) 

    if last_time is None: 
     last_time = current_time 

    temperatures.append(float(row[1])) 
    humidities.append(float(row[2])) 

    if (current_time - last_time) > datetime.timedelta(minutes=3): 
     print(''' 
averages from '{last}' to '{curr}' 
    temperature: {temperature:06.3f} 
    humidity:  {humidity:06.3f} 
     '''.format(
      last=last_time, curr=current_time, 
      temperature=sum(temperatures)/len(temperatures), 
      humidity=sum(humidities)/len(humidities), 
     ).lstrip()) 

     last_time = current_time 
     temperatures = [] 
     humidities = [] 
+0

danke für die Antwort, ziemlich genau das, was ich suchte, konnte nicht meinen Kopf herum, wie man in bestimmten Schritten über die Reihen iterieren, sorry, wenn meine Frage faul schien –

Verwandte Themen