逐行从csv计算运行总计

时间:2018-11-29 16:53:05

标签: python csv bigdata average mean

我正在逐行加载一个csv文件,因为其中有大约8亿行,而且我需要分析其中许多文件,因此并行加载至关重要,因此也需要逐行加载,以免炸毁记忆。

我得到了一个答案,该答案是如何使用collections.Counter()计算整个数据集中存在唯一ID的条目数。 (请参阅Counting csv column occurrences on the fly in Python

但是有没有一种方法可以为另一列中的每个唯一ID计算读入行的另一列中的运行数据总数呢?

例如假设您的csv文件中的数据只有两列,因此如下所示:

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

第二列包含唯一的ID,第一列中要为其保留连续的值。因此您的输出应如下所示:

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

在第二列中ID为'1'的地方,总数由第一列中的1 + 1给出。 对于第一列中的ID“ 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中有效地完成此操作。提前致谢!

0 个答案:

没有答案