【问题标题】:python - how to count number of numbers from columns?python - 如何计算列中的数字数量?
【发布时间】:2012-10-02 20:01:12
【问题描述】:

我有一个包含以下输入数据的文件:

       IN   OUT
data1  2.3  1.3
data2  0.1  2.1
data3  1.5  2.8
dataX  ...  ...

有成千上万个这样的文件,每个文件都有相同的 data1、data2、data3、...、dataX 我想计算所有文件中每个数据和列的每个值的数量。示例:

在文件“data1-IN”(文件名)中

2.3 - 50    (times)
0.1 - 233   (times)
... - ...   (times)

在文件“data1-OUT”(文件名)中

2.1 - 1024 (times)
2.8 - 120  (times)
... - ...  (times)

在文件“data2-IN”中(文件名)

0.4 - 312    (times)
0.3 - 202   (times)
... - ...   (times)

在文件“data2-OUT”中(文件名)

1.1 - 124 (times)
3.8 - 451  (times)
... - ...  (times)

在文件 'data3-IN' ...

哪种 Python 数据结构最适合计算此类数据?我想使用多维字典,但我正在努力解决 KeyErrors 等问题。

【问题讨论】:

    标签: python


    【解决方案1】:

    你真的要使用collections.Counter,可能包含在collections.defaultdict中:

    import collections
    import csv
    
    counts = collections.defaultdict(collections.Counter)
    
    for filename in files:
        for line in csv.reader(open(filename, 'rb')):
             counts[filename + '-IN' ][line[1]] += 1
             counts[filename + '-OUT'][line[2]] += 1
    

    【讨论】:

    • Python 2.6.4 (r264:75706, Apr 2 2012, 20:24:27) [C] on sunos5 输入“帮助”、“版权”、“信用”或“许可”以获取更多信息信息。 >>> 导入集合 >>> counts = collections.defaultdict(collections.Counter) Traceback(最近一次调用最后):文件“”,第 1 行,在 中 AttributeError:'module' 对象没有属性'计数器'
    • From stackoverflow.com/questions/5079790/… : dictionary = collections.defaultdict(lambda: collections.defaultdict(int)) 这两个定义有什么区别?
    • 这个docs.python.org/library/collections.html 说 defaultdict 从 2.5 开始就可用
    • @przemol:Counter 比具有int 值的defaultdict 提供更多功能,例如检索最高计数,以及以各种方式组合多个计数器。阅读链接文档了解更多详情。
    • 我应该使用哪个版本的 python 才能使用 collections.Counter ?
    【解决方案2】:

    我最近开始使用Pandas 数据框。它有一个 CSV 阅读器,使切片和切块数据非常简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 2016-03-12
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多