如何加快大型数据帧中匹配字符串的计数?



我有一个关键字列表,我想计算每个关键字在文章中出现的次数。问题是我有超过五十万篇文章(数据帧格式(,并且我已经有一个产生所需结果的代码。但是,计算数据帧每个项目中所有关键字的实例大约需要 40-50 秒。在这方面,我正在寻找更有效的方法。

我一直在使用str.count()命令,以及一个

count_matrix= pd.DataFrame(None)
for word in keywords:
count_matrix[str(word)]=df['article'].str.count(word)

输出完全符合我的需求,唯一的问题是计算大约需要 40-50 秒,因为df['article']有超过五十万篇文章。任何提高其效率的建议将不胜感激。

选项:

  1. 将文本文档集合转换为令牌计数矩阵: SKlearn 计数矢量化器

  2. 用Gensim或NTLK构建一个单词袋。

  3. 在熊猫中按块加载大量文件:熊猫块

你想要某种计数器。不要一直遍历您要查找的每个单词的整个DF,遍历一次即可获得字数。我不会撒谎,我怀疑有更好的 Pandas 方法,但你可以通过这种方式构建一个计数器:

import random
import string
from collections import defaultdict
import pandas as pd

df = pd.DataFrame({'a': [''.join(random.choices(list(string.ascii_lowercase),
k=10))
for x in range(10000)]})
counts = defaultdict(dict)
for row in df.iterrows():
row = row[1]['a'].split() # Totally useless here because there is no whitespace but, if there was, you can split on it and iterate the words
for item in row:
counts[item] = counts.get(item, 0) + 1

通常,迭代方法和熊猫根本不混合。这似乎是一个极端情况,如果没有 Python 迭代,我看不到可以改进。

最新更新