猿问

文本中单词的频率(熊猫)

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


数据:


        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 日 - prévu 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


ibeautiful
浏览 158回答 3
3回答

收到一只叮咚

value_counts您可以将文本转换为计数器,然后使用和的组合从中获取结果to_dict。# Assuming the text split is on \stext_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    Frequency0   l’iss   01   station 22   américaines 03   capsule 04   dernier 05   solaires    06   fusées  07   privé   0另一种方法是使用 Python 的 native Counter:from collections import Countertext_counter = Counter(text.split())df['Frequency'] = df.word.apply(lambda x: text_counter.get(x, 0))

POPMUISE

反过来会更容易。Counter从对象开始,然后构建数据框from collections import Countertext = '''é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. 22 mai 2012. - prévu 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.'''# naive splitting, it might be better to use regex with \bc = Counter(text.split())df = pd.DataFrame(list(c.items()), columns=['word', 'count'])print(df.head())输出         word  count0  états-unis      21           :      32   lancement      43      réussi      24        pour      5然后,您可以为您想要的单词过滤数据框(或者您可以在构建数据框时进行过滤)。

陪伴而非守候

用空格替换逗号,.split()然后使用字典理解并将其映射到您的 df。import pandas as pdtext = "é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. 22 mai 2012. - prévu 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."df = pd.DataFrame({'word': ["l’iss", 'station', "américaines", "capsule", "dernier", "solaires", "fusée", "privé"]})text_list = text.replace(',', ' ').split()word_counts = {i: text_list.count(i) for i in text_list}df['frequency'] = df['word'].map(word_counts).fillna(0)
随时随地看视频慕课网APP

相关分类

Python
我要回答