Рассчитать текущую сумму из CSV построчно - PullRequest
0 голосов
/ 29 ноября 2018

Я загружаю в файл CSV построчно, потому что в нем ~ 800 миллионов строк, и есть много таких файлов, которые мне нужно проанализировать, поэтому параллельная загрузка имеет первостепенное значение, а также необходима построчная загрузка, поэтомукак не взорвать память.

Мне был дан ответ о том, как рассчитать количество записей, в которых уникальные идентификаторы присутствуют во всем наборе данных, используя collections.Counter().(см. Подсчет вхождений столбца csv на лету в Python )

Но есть ли способ вычислить промежуточный итог записей данных в другом столбце строки для каждого уникального идентификатора?из другого столбца?

например.Предположим, что данные в вашем CSV-файле имеют только два столбца и поэтому выглядят следующим образом:

 [1 1]
 [1 1]
 [2 2]
 [3 2]
 [2 2]
 [1 2]

Где второй столбец содержит уникальные идентификаторы, для которых вы хотите сохранить промежуточный итог значений в первомколонка.Таким образом, ваш вывод должен выглядеть следующим образом:

{'1': 2, '2': 8}

Где для идентификатора '1' во втором столбце, общее значение дается 1 + 1 в первом столбце.А для идентификатора '2' в первом столбце итоговое значение определяется как 2 + 3 + 2 + 1.

Как можно сделать это быстро, учитывая огромный размер CSV, с которым я работаю?

import csv

features = {}

with open(filename) as f:
        reader = csv.reader(f,delimiter=',')                
        for row in reader:            
                ID = row[1]               
                if SrcDevice not in features.keys():
                        features[ID] = {}
                        features[ID]['Some_feature'] = 0                        
                features[SrcDevice]['Some_feature'] += float(row[0])

Но так много строк занимает слишком много времени.Идея заключается в том, что я бы также создал аналогичный словарь, но с количеством вхождений, чтобы я мог разделить словарь функций по этому словарю, чтобы вычислить среднее значение функций.(Кажется ненужным, но помните, что эти файлы настолько велики, что читаются построчно).

Использование sqlite3 было упомянуто в связанном вопросе, но мне было бы интересно узнать, можно ли это эффективно сделать в первую очередь в Python.Заранее спасибо!

...