如何统计CSV输入列中字符出现的次数?

2024-04-19 12:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV文件(从Excel转换而来),其中有一列我感兴趣的字符串。这些字符串(大约4000个)由4个字符到22个字符的不同长度组成,但只有4个字符(A、B、C或D)。在

我想计算4个字符(A、B、C或D)在字符串的每个位置上出现的次数。在

例如,考虑以下字符串:

ABBA, CDABB, AAAAAA

然后,在每个字符串的第一个位置,A出现两次,C出现一次。在每个字符串的第6个位置,A发生一次。在

到目前为止,我想到了解决这个问题的步骤:

  1. 按字母顺序对字符串排序(A、B、C、D)
  2. 找到第一个B的索引(=As的数量减1)
  3. 重复列表.查找对于C和D
  4. 在某个数组的第一个位置存储A、B、C、D的出现次数。在
  5. 删除每个字符串的第一个字母(使用字符串.lstrip()). 重复上述步骤。在

或者只是迭代并计算字母在第n个位置的出现次数,然后执行字符串.lstrip()删除该字母并重复迭代。在

但是,我不知道如何操作CSV文件中的字符串,有人有什么提示吗?在


Tags: 文件csv字符串排序顺序字母步骤次数
2条回答
from collections import Counter

data = ['foo', 'bar', 'foobar']

counts = Counter()
for line in data:
    counts.update(list(enumerate(line, start=1)))

# count of letter 'o' in the 3rd column:
print(counts[(3, 'o')])
print(counts)

# 2
# Counter({
#   (1, 'f'): 2, (2, 'o'): 2, (3, 'o'): 2, (5, 'a'): 1, 
#   (6, 'r'): 1, (3, 'r'): 1, (1, 'b'): 1, (2, 'a'): 1, 
#   (4, 'b'): 1
# })
from collections import Counter
import itertools

x = ["ABBA", "CDABB", "AAAAAA"]
Counter(itertools.chain(*[zip(y, enumerate(1, len(y)+1)) for y in x]))

Counter({('A', 1): 2, ('A', 4): 2, ('A', 3): 2, ('B', 2): 1, ('B', 3): 1, ('B', 4): 1, ('C', 1): 1, ('A', 6): 1, ('A', 5): 1, ('D', 2): 1, ('A', 2): 1, ('B', 5): 1})

[zip(y, range(1, len(y)+1)) for y in x]-根据x中每个元素的位置创建一对(A,0),(B,1)等。因此我们得到-

^{pr2}$

chain-将所有这些列表链接到一个列表中,Counter是Counter类的构造函数,它实际上是一个字典,它计算每个值出现的次数。在

您可以使用https://docs.python.org/2/library/csv.html从csv文件读取数据

相关问题 更多 >