文本中的词频(Pandas)

2024-09-26 17:55:45 发布

您现在位置: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. 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.

我试过:

from collections import Counter

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

我的输出:

AttributeError: 'StringMethods' object has no attribute 'apply'

良好输出:

        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

Tags: 文本deam单词lawordfusfrequency
3条回答

换一种方式就容易多了。从Counter对象开始构建数据帧

from collections import Counter

text = '''é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 \b
c = Counter(text.split())

df = pd.DataFrame(list(c.items()), columns=['word', 'count'])
print(df.head())

输出

         word  count
0  états-unis      2
1           :      3
2   lancement      4
3      réussi      2
4        pour      5

然后可以过滤dataframe中需要的单词(或者在构建dataframe时进行过滤)。你知道吗

您可以将文本转换为计数器,然后使用value_countsto_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的本机Counter

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

将逗号替换为空格,然后.split(),然后使用字典理解并将其映射到df。你知道吗

import pandas as pd

text = "é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)

相关问题 更多 >

    热门问题