这感觉它应该非常简单,但我很难找到解决方案。
我有一个完整的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'对象不可迭代
我已经厌倦了许多不同的事情但是却没有取得任何成功。
答案 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]