为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算 Pandas 数据框中 500 个最常见的单词

如何计算 Pandas 数据框中 500 个最常见的单词

一只甜甜圈 2021-08-24 15:18:53
我在名为 Text(每行 1 个文本)的列中有一个包含 500 个文本的数据框,我想计算所有文本中最常见的单词。我到目前为止尝试过(来自stackoverflow的两种方法):pd.Series(' '.join(df['Text']).lower().split()).value_counts()[:100]和Counter(" ".join(df["Text"]).split()).most_common(100)两者都给了我以下错误:类型错误:序列项 0:预期的 str 实例,找到列表我已经简单地尝试了计数器方法df.Text.apply(Counter()) 这给了我每个文本中的字数,我还更改了计数器方法,因此它返回每个文本中最常见的单词但我想要整体最常用的词这是数据帧的示例(文本已经小写,已从标点符号中清除,已标记,并已删除停用词)    Datum   File    File_type                                         Text                         length    len_cleaned_textDatum                                                   2000-01-27  2000-01-27  _04.txt     _04     [business, date, jan, heineken, starts, integr...       396         220编辑:“报告”它的代码  for file in file_list:    name = file[len(input_path):]        date = name[11:17]        type_1 = name[17:20] with open(file, "r", encoding="utf-8", errors="surrogateescape") as rfile:                format                text = rfile.read()                text = text.encode('utf-8', 'ignore')                text = text.decode('utf-8', 'ignore')     a={"File": name, "Text": text,'the':count_the, 'Datum': date, 'File_type': type_1, 'length':length,}        result_list.append(a)新细胞  df['Text']= df['Text'].str.lower()    p = re.compile(r'[^\w\s]+')    d = re.compile(r'\d+')    for index, row in df.iterrows():        df['Text']=df['Text'].str.replace('\n',' ')        df['Text']=df['Text'].str.replace('################################ end of story 1 ##############################','')        df['Text'] = [p.sub('', x) for x in df['Text'].tolist()]        df['Text'] = [d.sub('', x) for x in df['Text'].tolist()]    df['Text']=df['Text'].apply(word_tokenize)             
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

好的,我明白了。您df['Text']由文本列表组成。所以你可以这样做:


full_list = []  # list containing all words of all texts

for elmnt in df['Text']:  # loop over lists in df

    full_list += elmnt  # append elements of lists to full list


val_counts = pd.Series(full_list).value_counts()  # make temporary Series to count

该解决方案避免使用过多的列表推导式,从而使代码易于阅读和理解。此外,不需要像re或不需要额外的模块collections。


查看完整回答
反对 回复 2021-08-24
?
千万里不及你

TA贡献1784条经验 获得超9个赞

这是我的版本,我将列值转换为列表,然后我制作一个单词列表,清理它,然后你就有了你的计数器:


your_text_list = df['Text'].tolist()

your_text_list_nan_rm = [x for x in your_text_list if str(x) != 'nan']

flat_list = [inner for item in your_text_list_nan_rm for inner in ast.literal_eval(item)] 


counter = collections.Counter(flat_list)

top_words = counter.most_common(100)


查看完整回答
反对 回复 2021-08-24
  • 3 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信