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

我在名为 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_text

Datum                                                   

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)

             


一只甜甜圈
浏览 136回答 3
3回答

小怪兽爱吃肉

好的,我明白了。您df['Text']由文本列表组成。所以你可以这样做:full_list = []  # list containing all words of all textsfor elmnt in df['Text']:  # loop over lists in df    full_list += elmnt  # append elements of lists to full listval_counts = pd.Series(full_list).value_counts()  # make temporary Series to count该解决方案避免使用过多的列表推导式,从而使代码易于阅读和理解。此外,不需要像re或不需要额外的模块collections。

千万里不及你

这是我的版本,我将列值转换为列表,然后我制作一个单词列表,清理它,然后你就有了你的计数器: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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python