首页 > 解决方案 > 文本中单词的频率(熊猫)

问题描述

我有一列单词,想计算文本中每个单词的频率并将结果保存在另一列中。

数据:

        word        frequency   
0       l’iss           
1       station         
2       américaines         
3       capsule         
4       dernier         
5       solaires            
6       fusées          
7       privé   

文本:

états-unis : lancement réussi pour station space x dragon états-unis : lancement réussi pour space x dragon la fusée falcon 9, développée par une société privée : spacex, a décollé de la station sans problème ce matin à 7h44 UTC。2012 年 5 月 22 日 - prevu initialement pour samedi dernier, le lancement a été reporté à la dernière seconde, Suite à la défaillance d'une Valve dans un des neuf moteurs du pre\xadmier étage du lan\xadceur。le lanceur a décollé du site de lancement du pas de tir 40 (slc-40) de la base de cape canaveral en floride, qui était autrefois utilisé pour les fusée titan iii et iv et qui a été reconverti pour ce lanceur。

我试过了:

from collections import Counter

freq = df['word'].str.apply(Counter(text))

我的输出:

AttributeError:“StringMethods”对象没有“应用”属性

良好的输出:

        word        frequency   
0       cape        1
1       station     2
2       américaines 0   
3       capsule     0   
4       dernier     1
5       solaires    0   
6       fusée       2

标签: pythonpandas

解决方案


value_counts您可以将文本转换为计数器,然后使用和的组合从中获取结果to_dict

# Assuming the text split is on \s
text_counts = pd.Series(text.split(' ')).value_counts().to_dict()
df['Frequency'] = df.word.apply(lambda x: text_counts.get(x, 0)) # In case the word doesn't exist
    word    Frequency
0   l’iss   0
1   station 2
2   américaines 0
3   capsule 0
4   dernier 0
5   solaires    0
6   fusées  0
7   privé   0

另一种方法是使用 Python 的 native Counter

from collections import Counter
text_counter = Counter(text.split())
df['Frequency'] = df.word.apply(lambda x: text_counter.get(x, 0))

推荐阅读