Python集合模块之Counter计数器

4

如果你刚开始学习Python,想知道如何告诉Python第3行的数据是一个数字而不是多个数字,那么我可以帮助你。我建议使用collections.Counter来处理数据,但它可能不是最合适的方法。

datafile.csv
Z4,29-Mar-13,Name 1,1234567
Z4,30-Mar-13,Name 1,1234567
Z4,1-Apr-13,Name 1,1234567
Z1,30-Mar-13,Name 2,1234568
Z1,1-Apr-13,Name 2,1234568
Z1,30-Mar-13,Name 3,1234569
Z2,28-Mar-13,Name 5,1234577
Z3,28-Mar-13,Name 4,1234570
Z3,29-Mar-13,Name 4,1234570
Z3,30-Mar-13,Name 4,1234570
Z3,1-Apr-13,Name 4,1234570
Z3,2-Apr-13,Name 4,1234570

datafiletotals.py

import csv
import collections

for row in csv.reader(open('datafile.csv')):
        print collections.Counter (row[3])

这是我当前的输出结果:
运行命令:python datafiletotals.py
Counter({'1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1, '6': 1})
Counter({'1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1, '6': 1})
Counter({'1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1, '6': 1})
Counter({'1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '6': 1, '8': 1})
Counter({'1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '6': 1, '8': 1})
Counter({'1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '6': 1, '9': 1})
Counter({'7': 2, '1': 1, '3': 1, '2': 1, '5': 1, '4': 1})
Counter({'1': 1, '0': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1})
Counter({'1': 1, '0': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1})
Counter({'1': 1, '0': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1})
Counter({'1': 1, '0': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1})
Counter({'1': 1, '0': 1, '3': 1, '2': 1, '5': 1, '4': 1, '7': 1})

这是我希望它看起来的样子。
1234567,3
1234568,2
1234569,1
1234577,1
1234570,5
1个回答

4

我认为您需要

>>> import csv, collections
>>> 
>>> with open("datafile.csv", "rb") as fp:
...     reader = csv.reader(fp)
...     counts = collections.Counter(row[3] for row in reader)
...     
>>> counts
Counter({'1234570': 5, '1234567': 3, '1234568': 2, '1234569': 1, '1234577': 1})

现在你并没有创建一个 Counter 对象,而是在每一行中请求一个 Counter 对象,而且每个实例都在计算 row[3] 中的字符数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接