在研究了StackOverflow之后,我想出了下面的代码来计算dataframe的一列中单词的相对频率:
df['objeto'] = df['objeto'].apply(unidecode.unidecode)
df['objeto'] = df['objeto'].str.replace('[^\w\s]','')
stop_words = nltk.corpus.stopwords.words('portuguese')
stop_words.extend(['12', 'termo', 'aquisicao', 'vinte', 'demandas'])
counter = Counter()
for word in " ".join(df['objeto']).lower().split():
if word not in stop_words:
counter[word] += 1
print(counter.most_common(10))
for word, count in counter.most_common(100):
print(word, count)
问题是代码执行大约需要30秒。我做错了什么?有什么方法可以优化和改进我的代码吗?我打算创建一个这样的函数来在其他 Dataframe 上执行此操作。
我是Pandas的初学者,我很少用它。我在stackoverflow上做了些研究。谢谢你。
1条答案
按热度按时间ttcibm8c1#
如果你提供一些可运行的例子,它会有所帮助:
这里的主要问题是不使用Pandas来计数。
pandas有
.value_counts()
在本例中,您希望将所有单词放在一个列中,这可以通过
.explode()
来实现您可以
.mask()
删除的话是.isin(stop_words)
然后.value_counts()