Рассчитать среднее значение за час Python CSV - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно обработать большой объем данных из файла CSV, файл содержит дату, время и несколько значений, включая то, что мне нужно.

Я сделал графический интерфейс в Python, используя tkinter для загрузки файла.

Программа генерирует новый CSV-файл для выгрузки обработанных данных, а затем открывает CSV-файл, содержащий необработанные данные.

Мне нужно среднее значение за час значения, содержащегося в 18-м столбце каждой строки. У меня уже есть программа такого рода. Я рассматриваю все значения за определенный час как блок.

Проблема заключается в том, что сумма, рассчитанная на блок, начинает отклоняться после 8-го блока (в частности, игнорируется первое значение указанного блока).

Это пример необработанных данных (я знаю, что это выглядит грязно, я не знаю, как загрузить файл, просто скопируйте и вставьте в текстовый файл и сохраните как csv).

fecha,hora,VoltajeParticulas,,,,,,,,,,,,,,,VoltajeParticulas
2019-02-14,00:06,0.65918,,5.351563,,,,,,,,,,,,,0.65918
2019-02-14,00:13,0.620117,,,,,,,,,,,,,,,0.620117
2019-02-14,00:20,0.74707,,,,,,,,,,,,,,,0.74707
2019-02-14,00:26,0.683594,,,,,,,,,,,,,,,0.683594
2019-02-14,00:33,0.688477,,,,,,,,,,,,,,,0.688477
2019-02-14,00:40,0.639648,,,,,,,,,,,,,,,0.639648
2019-02-14,00:47,0.688477,,,,,,,,,,,,,,,0.688477
2019-02-14,00:53,0.625,,,,,,,,,,,,,,,0.625
2019-02-14,01:00,0,,0.063477,,,,,,,,,,,,,0
2019-02-14,01:07,0,,,,,,,,,,,,,,,0
2019-02-14,01:14,0,,,,,,,,,,,,,,,0
2019-02-14,01:20,0,,,,,,,,,,,,,,,0
2019-02-14,01:27,0,,,,,,,,,,,,,,,0
2019-02-14,01:34,0,,,,,,,,,,,,,,,0
2019-02-14,01:41,0.058594,,,,,,,,,,,,,,,0.058594
2019-02-14,01:47,0.004883,,,,,,,,,,,,,,,0.004883
2019-02-14,01:54,0,,,,,,,,,,,,,,,0
2019-02-14,02:01,0,,0.053711,,,,,,,,,,,,,0
2019-02-14,02:08,0.053711,,,,,,,,,,,,,,,0.053711
2019-02-14,02:14,0,,,,,,,,,,,,,,,0
2019-02-14,02:21,0,,,,,,,,,,,,,,,0
2019-02-14,02:28,0,,,,,,,,,,,,,,,0
2019-02-14,02:35,0,,,,,,,,,,,,,,,0
2019-02-14,02:41,0,,,,,,,,,,,,,,,0
2019-02-14,02:48,0,,,,,,,,,,,,,,,0
2019-02-14,02:55,0,,,,,,,,,,,,,,,0
2019-02-14,03:02,0,,0.068359,,,,,,,,,,,,,0
2019-02-14,03:08,0,,,,,,,,,,,,,,,0
2019-02-14,03:15,0,,,,,,,,,,,,,,,0
2019-02-14,03:22,0.068359,,,,,,,,,,,,,,,0.068359
2019-02-14,03:29,0,,,,,,,,,,,,,,,0
2019-02-14,03:35,0,,,,,,,,,,,,,,,0
2019-02-14,03:42,0,,,,,,,,,,,,,,,0
2019-02-14,03:49,0,,,,,,,,,,,,,,,0
2019-02-14,03:56,0,,,,,,,,,,,,,,,0
2019-02-14,04:02,0,,0,,,,,,,,,,,,,0
2019-02-14,04:09,0,,,,,,,,,,,,,,,0
2019-02-14,04:16,0,,,,,,,,,,,,,,,0
2019-02-14,04:23,0,,,,,,,,,,,,,,,0
2019-02-14,04:29,0,,,,,,,,,,,,,,,0
2019-02-14,04:36,0,,,,,,,,,,,,,,,0
2019-02-14,04:43,0,,,,,,,,,,,,,,,0
2019-02-14,04:50,0,,,,,,,,,,,,,,,0
2019-02-14,04:56,0,,,,,,,,,,,,,,,0
2019-02-14,05:03,0,,0.014648,,,,,,,,,,,,,0
2019-02-14,05:10,0.014648,,,,,,,,,,,,,,,0.014648
2019-02-14,05:17,0,,,,,,,,,,,,,,,0
2019-02-14,05:23,0,,,,,,,,,,,,,,,0
2019-02-14,05:30,0,,,,,,,,,,,,,,,0
2019-02-14,05:37,0,,,,,,,,,,,,,,,0
2019-02-14,05:44,0,,,,,,,,,,,,,,,0
2019-02-14,05:50,0,,,,,,,,,,,,,,,0
2019-02-14,05:57,0,,,,,,,,,,,,,,,0
2019-02-14,06:04,0,,0.024414,,,,,,,,,,,,,0
2019-02-14,06:11,0,,,,,,,,,,,,,,,0
2019-02-14,06:17,0,,,,,,,,,,,,,,,0
2019-02-14,06:24,0,,,,,,,,,,,,,,,0
2019-02-14,06:31,0,,,,,,,,,,,,,,,0
2019-02-14,06:38,0.024414,,,,,,,,,,,,,,,0.024414
2019-02-14,06:44,0,,,,,,,,,,,,,,,0
2019-02-14,06:51,0,,,,,,,,,,,,,,,0
2019-02-14,06:58,0,,,,,,,,,,,,,,,0
2019-02-14,07:05,0,,2.124023,,,,,,,,,,,,,0
2019-02-14,07:11,0,,,,,,,,,,,,,,,0
2019-02-14,07:18,0,,,,,,,,,,,,,,,0
2019-02-14,07:25,0,,,,,,,,,,,,,,,0
2019-02-14,07:31,0,,,,,,,,,,,,,,,0
2019-02-14,07:38,0,,,,,,,,,,,,,,,0
2019-02-14,07:45,0.698242,,,,,,,,,,,,,,,0.698242
2019-02-14,07:52,0.771484,,,,,,,,,,,,,,,0.771484
2019-02-14,07:58,0.654297,,,,,,,,,,,,,,,0.654297
2019-02-14,08:05,0.678711,,6.196289,,,,,,,,,,,,,0.678711
2019-02-14,08:12,0.668945,,,,,,,,,,,,,,,0.668945
2019-02-14,08:19,0.610352,,,,,,,,,,,,,,,0.610352
2019-02-14,08:26,0.654297,,,,,,,,,,,,,,,0.654297
2019-02-14,08:32,0.65918,,,,,,,,,,,,,,,0.65918
2019-02-14,08:39,0.727539,,,,,,,,,,,,,,,0.727539
2019-02-14,08:46,0.717773,,,,,,,,,,,,,,,0.717773
2019-02-14,08:53,0.698242,,,,,,,,,,,,,,,0.698242
2019-02-14,08:59,0.78125,,,,,,,,,,,,,,,0.78125
2019-02-14,09:06,0.717773,,6.103514,,,,,,,,,,,,,0.717773
2019-02-14,09:13,0.693359,,,,,,,,,,,,,,,0.693359
2019-02-14,09:20,0.742188,,,,,,,,,,,,,,,0.742188
2019-02-14,09:26,0.74707,,,,,,,,,,,,,,,0.74707
2019-02-14,09:33,0.771484,,,,,,,,,,,,,,,0.771484
2019-02-14,09:40,0.805664,,,,,,,,,,,,,,,0.805664
2019-02-14,09:47,0.800781,,,,,,,,,,,,,,,0.800781
2019-02-14,09:53,0.825195,,,,,,,,,,,,,,,0.825195
2019-02-14,10:00,0.751953,,4.633789,,,,,,,,,,,,,0.751953
2019-02-14,10:07,0.742188,,,,,,,,,,,,,,,0.742188
2019-02-14,10:14,0.761719,,,,,,,,,,,,,,,0.761719
2019-02-14,10:20,0.74707,,,,,,,,,,,,,,,0.74707
2019-02-14,10:27,0.795898,,,,,,,,,,,,,,,0.795898
2019-02-14,10:34,0.834961,,,,,,,,,,,,,,,0.834961
2019-02-14,11:25,87,,,,,,,,,,,,,,,

Это функция, которая вычисляет среднее значение за блок:

def processor():
with open ("Datos_procesados1.csv", mode='w') as csv_file:
    fieldnames = ['Fecha', 'Hora', 'Promedio']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()

    with open(main.filename) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        line_count = 0
        prom_count = 0
        adder = 0
        prom = 0
        datablock = 0

        for row in csv_reader:
            if line_count == 0:
                line_count += 1
                date = row[0]
            else:
                alpha,bravo = row[1].split(':')
                intalpha = int(alpha)
                date = row[0]
                if intalpha == datablock:
                    prom_count = prom_count + 1
                    adder = adder + float(row[17])
                    prom = float(adder) / prom_count
                    floatprom = float(prom)
                    line_count += 1
                    print("Test")
                else: 
                    print("Block!")
                    print(adder)
                    print(prom_count)
                    print(prom)
                    prom = float(adder) / prom_count
                    writer.writerow({'Fecha':date,'Hora':datablock,'Promedio':floatprom})
                    prom_count = 0
                    prom = 0
                    adder = 0
                    datablock += 1
                    line_count += 1

Заранее спасибо!

...