python - 文本中单词的频率(熊猫)
问题描述
我有一列单词,想计算文本中每个单词的频率并将结果保存在另一列中。
数据:
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
解决方案
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))
推荐阅读
- python - 有没有办法用 sqlite3 在 python 中重置光标?
- java - 运行 mvn 包时出现 java.lang.AssertionError
- ios - 如何使用 [String: Any] 参数构造多部分表单数据请求
- excel - 如何在 VBA 的类中使用私有方法?
- php - 将 IMG 标签转换为 AMP-IMG
- php - 在语音转文本 watson API 上出现错误 401
- c# - 生成所有可能的 2 字符组合
- python - 如何解决列表中的数据框
- python - 无法将方法添加到 Python 中的封闭类中存在的列表中
- amazon-web-services - 如何在同一个 EC2 实例上设置多个 Squid 代理?