2017-02-05 7 views
-1

My Logfile (Logfile.csv) выглядит следующим образом:Вычислить среднее значение для каждого N минут

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 

первая строка Отметка второй строки, является температура третья строка Влажность

Как итерацию по линиям, чтобы я мог рассчитать средние значения температуры и влажности за каждые N минут.

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 

Я знаю, что панды, вероятно, будет хороший вариант, но я предпочел бы подход, связанный Csv

Вот что я закончил с:

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 = [] 

Я получаю средние значения для каждого временной интервал я определяю с timedelta для влажности и температур спасибо за помощь

ответ

1

Хорошо .. используйте timedelta, чтобы сравнить время и список для сохранения значений. Затем вычислить среднее значение, как это: sum(values)/len(values)

Вот несколько примеров:

Но имейте в виду, что этот подход не обрабатывает оставшиеся данные, и ожидает ввода отсортированный по дате.

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

спасибо за ответ, в значительной степени то, что я искал, не мог задуматься о том, как итерировать в определенных шагах по рядам, извините, если мой вопрос казался ленивым –

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

  • Нет связанных вопросов^_^