Python:找到最常见字符串的最有效方法

时间:2017-12-09 21:49:31

标签: python performance list pandas

我想在一个国家找到20个最常见的名字及其频率。

假设我列出了所有居民在100个城市的名字。每个列表可能包含许多名称。假设我们说的是100个列表,每个列表包含1000个字符串。

在全国范围内获取20个最常见名称及其频率的最强高效方法是什么?

这是我开始的方向,假设我将每个城市都放在同一目录的文本文件中:

  1. 使用pandascollection模块。
  2. 遍历每个city.txt,使其成为一个字符串。然后,使用Counter模块将其转换为集合,然后转换为DataFrame(使用to_dict)。
  3. 将每个DataFrame与前一个DataFrame联合起来。
  4. 然后,分组依据并计算(*)DataFrame。
  5. 但是,我认为这种方法可能不起作用,因为DataFrame可能会变得太大。

    想听听有关这方面的任何建议。谢谢。

2 个答案:

答案 0 :(得分:1)

以下是示例代码:

import os
from collections import Counter

cities = [i for i in os.listdir(".") if i.endswith(".txt")]

d = Counter()     

for file in cities:
    with open(file) as f:
        # Adjust the code below to put the strings in a list
        data = f.read().split(",")
        d.update(Counter(data))

out = d.most_common(10)
print(out)

答案 1 :(得分:0)

您也可以使用NLTK库,我使用下面的代码用于类似目的。

from nltk import FreqDist
fd = FreqDist(text)    
top_20 = fd.most_commmon(20)        # it's done, you got top 20 tokens :)