首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计CSV列表中每一位排列的次数

统计CSV列表中每一位排列的次数
EN

Stack Overflow用户
提问于 2014-02-24 20:36:40
回答 4查看 128关注 0票数 2

这里的新手正在寻找一种用Python处理一些数据的更整洁的方法。

我有0和1的列表,长度从CSV文件中的2-10位数不等。我想要计算每个置换在CSV中发生的次数。

有一种简洁的方法吗?

我现在拥有的是:

代码语言:javascript
复制
LL = float(0)
LW = float(0)
WL = float(0)
WW = float(0)    

with open('filename.csv', 'rb') as csvfile:
        my_content = csv.reader(csvfile)

        for row in my_content:
            if not row:
                continue
            else:
                if len(row) == 2:
                    if row == ['0', '0']:
                        LL += 1
                    if row == ['0', '1']:
                        LW += 1
                    if row == ['1', '1']:
                        WW += 1
                    if row == ['1', '0']:
                        WL += 1

等每一排长度..。

这种方法适用于2位,但我希望有另一种方法来完成更长的列表。谢谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-24 20:41:02

为此您可以使用collections.Counter。由于它是在字典上实现的,因此需要将(可变的list)行转换为(不可变的)tuple来使用它们:

代码语言:javascript
复制
from collections import Counter

count = Counter(map(tuple, my_content))

示例:

代码语言:javascript
复制
>>> data = [['0', '0'], ['0', '1', '0'], ['0', '0']]
>>> count = Counter(map(tuple, data))
>>> count
Counter({('0', '0'): 2, ('0', '1', '0'): 1})

这将避免为您想要计数或手动创建和递增字典的每件事情定义单独的变量,并使您能够访问方便的额外特性,如.most_common(n)

票数 3
EN

Stack Overflow用户

发布于 2014-02-24 20:41:56

这将为您提供一本字典,将排列映射到它们的计数。

代码语言:javascript
复制
import collections
import csv

answer = collections.defaultdict(int)
with open('filename.csv') as infile:
    for row in csv.reader(infile):
        answer[''.join(row)] += 1

如果要在示例中运行此代码,则会有一个类似于以下内容的字典:

代码语言:javascript
复制
answer = {'00' : 1,
          '01' : 1,
          '10' : 1,
          '11' : 1,
         }
票数 2
EN

Stack Overflow用户

发布于 2014-02-24 20:48:39

首先,您可以使用"LL = 0.0“代替float(0)。小数点表示它是浮点数。无论如何,你不需要浮点数,所以你可以只使用整数。

接下来,您不需要my_content变量。只有"for row in csv.reader(csvfile)“。

另外,有一个字典而不是四个变量会更好。您可以使用"binCounts = {'00':0,'01':0,'10':0,'11':0}“这样的代码,而不是从"if len(行) == 2:”开始的代码,只需要这样的代码:

如果binCounts中的‘’.联接(行):binCounts‘.联接(行) += 1

但是,您提到csv文件中的数字可以是2到10位数。这将只计算的行,确切地说是两位数。你能举个例子说明你的csv文件是什么样子的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21998462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档