CSV到整数列表和计数整数的出现次数

时间:2015-11-28 17:53:39

标签: python csv

这感觉它应该非常简单,但我很难找到解决方案。

我有一个完整的CSV文件

9,12,9,12,8,6,10,7,7,15,8,8,7,8,8,10,10,3,8

我要做的就是将CSV文件读取到一个int列表中,然后使用Counter from Collections计算每个int的出现次数,然后将此信息保存到CSV文件中。

我已经尝试了

import csv
from collections import Counter

with open('/Users/willturner/Desktop/caloHits.csv', 'rb') as f:
    reader = csv.reader(f)
    CaloHits = list(reader)

print Counter(10)

获取列表中的10个数字。但是我得到了

- > TypeError:' int'对象不可迭代

我已经厌倦了许多不同的事情但是却没有取得任何成功。

2 个答案:

答案 0 :(得分:0)

你实际上并没有真正反击计数器。试试这个:

import csv
from collections import Counter

with open('/Users/willturner/Desktop/caloHits.csv', 'rb') as f:
    reader = csv.reader(f)
    calo_hits_counter = Counter(reader)

print calo_hist_counter[10]

但是,这可能会返回0.原因是,当您加载CSV时,数字实际上并未转换为整数。

要解决此问题,您可以检查字符串'10'的计数,即calo_hist_counter['10']

或者,您可以通过执行calo_hits_counter = Counter(map(int, reader))

将加载的所有数据转换为整数

顺便说一句,如果您要加载的所有数据都在一行中,那么您真的不需要csv库的开销,没有它就可以。

from collections import Counter

with open('/Users/willturner/Desktop/caloHits.csv', 'rb') as f:
    reader = f.read()
    calo_hits_counter = Counter(reader)

答案 1 :(得分:0)

您可以通过循环csv行/行并按每行更新计数器对象来完成此操作。

import csv
from collections import Counter

calo_hits = Counter()
with open('/Users/willturner/Desktop/caloHits.csv') as f: # 'rb' is not necessary
    reader = csv.reader(f)
    for row in reader:
        calo_hits.update([int(n.strip()) for n in row if n.strip()])

print calo_hits[10]