当前位置: 首页 > 知识库问答 >
问题:

删除数据框x%中出现的单词

司雅畅
2023-03-14

我有一个有数千行的pd数据帧。每一行都包含一列标记为text\u processed的包含文本的列。这些文本可能很长,每行/文本数百个单词。现在我想消除95%行中出现的单词。我所做的是将所有文本连接到一个大字符串中,并标记该字符串。我现在有了所有课文中所有单词的词汇表。现在我想得到每个单词所在的行数。一种简单(且缓慢)的方法是循环每个单词,比较该单词是否存在于列中,并对结果求和以获得该单词所在的行数。这可以在这里看到:

wordcountPerRow = []
for word in all_words:
    if word in [':', '•', 'and', '%', '\\', '|', '-', 'no', 'of', ')', '(', '[', ']', '--', '/', '*', ';', '`', '``', '\'\'', '+']:
        continue
    try:
        wordcountPerRow.append([word, df_note['text_processed'].str.contains(r''+word).sum()])
    except:
        print(word)

一旦我有了所有的总和,我就做len(df)*0.95,看看一个单词的行数

与此类似:删除Python语料库中出现超过x%的单词

共有2个答案

丁钟展
2023-03-14

看起来您可以使用稍微扭曲的计数矢量器。扭曲之处在于,因为countvectorizer计算每个文档的出现次数,所以我们可以简单地应用布尔掩码(count_vector

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(df_note['text_processed'].tolist())#,max_df=0.8, min_df=0.1)#this eliminates words in top 0.8
count_vector=cv.fit_transform(df_note['text_processed'].tolist())

#number of documents a word occurs in
word_document_count = pd.DataFrame(np.array(np.sum(count_vector > 0, axis=0)).transpose() \
                                   , index=cv.get_feature_names(), columns=['Document Count'])

top_perc_num = len(df_note)*0.8
bottom_perc_num = len(df_note)*0.2
word_document_count_trunc = word_document_count[(word_document_count['Document Count'] < top_perc_num) & (word_document_count['Document Count'] > bottom_perc_num)]

我相信这是一种更快完成任务的方法。我唯一的抱怨是,这些数字似乎与最初的方法略有出入。我尝试了一个可重复的小例子,但结果是相同的。

这适用于vocab中的200k个单词和90k行

师冥夜
2023-03-14

你试过pd吗。str()???

我们不知道你的字符串看起来怎么样,但是因为它的df,我可以假设你可以“切片”应用这个函数的字符串。

您想保留左起的前10个字母,您可以使用:

left = df['Your column'].str[:10]

您希望保留右侧的前10个字母,您可以使用:

right = df['Your column'].str[-10:]

举个例子,可以作为解决问题的良好开端

 类似资料:
  • 我正在处理一个以标记/单词列表的形式出现的大型语料库。语料库包含约1900000个单词,我运行了一个代码来获取最频繁的单词,现在语料库有140000个单词。 我想删除出现在文档中超过95%而少于5%的单词 语料库的样本 首先,我找到了最常用的单词 然后,我应用这个for循环来查找出现率超过95%的单词列表 但这段代码需要很长时间才能运行,并且不会返回任何输出。 我也试图按照一些答案我发现和应用Co

  • 我有一个名为“mydata”的数据框,看起来像这样: 我想删除第2、4、6行。例如,像这样:

  • 我目前有以下情况: 我有多个复选框,一旦单击任何复选框,它的值将添加到数组中。如果未选中该复选框,则需要再次将该项从数组中删除。 以下操作有效,并将它们添加到我的中。但当再次选中该复选框时,它不会被删除。当然,我可以使用

  • 问题内容: 我需要删除pandas中数据框的前三行。 我知道会删除最后一行,但我不知道如何删除前n行。 问题答案: 用途: 将为您提供一个没有前三行的新df。

  • 本文向大家介绍如何删除R数据框中的行?,包括了如何删除R数据框中的行?的使用技巧和注意事项,需要的朋友参考一下 这可以通过使用方括号来完成。 示例 假设我们要删除第4、7和9行。我们将执行以下操作-

  • 我有一个数据框架,我连接到它的所有字段。 连接后它成为另一个数据帧,最后我将其输出写入csv文件,并在其两列上进行分区。它的一列存在于第一个数据帧中,我不想包含在最终输出中。 这是我的代码: 在这里,我连接并创建另一个数据帧: 这就是我尝试过的 现在我不希望在我的输出中的数据分区列。 我正在基于DataPartition进行分区,所以我没有得到,但因为DataPartition存在于主数据帧中,所