Удаление записей серии, если они являются стоп-словами - PullRequest
0 голосов
/ 26 января 2019

Я хочу взять серию слов и их частоту, удалить записи с общими стоп-словами и затем записать их в файл .txt:

f= open('frequ_words.txt', 'w+')

frequ_words = pd.Series(' '.join(df['message']).lower().split()).value_counts()[:500]

stop_words = get_stop_words('de')

for i in stop_words:
        try:
            frequ_words.drop(i)
        except:
            pass

f.write(str(frequ_words))

f.close()

Я пробовал и другие способы зацикливания, напримеркак:

for i in frequ_words:
    if i in stop_words:
        pass
    else:
        f.write(frequ_words)

f.close()

Но я не могу заставить это работать.Предложения?

РЕДАКТИРОВАТЬ:

Данные ряда выглядят примерно так:

word1     89086
word2     85946
...
word500    1098

1 Ответ

0 голосов
/ 26 января 2019

Если у вас есть ряд частот слов, где индекс серии - это сами слова, вы можете отфильтровать стоп-слова, используя одно выражение панд: words = words[words.index.values != stop_words.values].

Вот пример использования серии, которая похожа на образец, который вы вставили выше:

words = pd.Series(data = [89086, 85946, 1098], index = ['word1', 'word2', 'word500'])

word1      89086
word2      85946
word500     1098
dtype: int64

И затем, если у вас есть другой ряд, содержащий в качестве значений стоп-слова:

stop_words = pd.Series(data=['word2'])

0    word2
dtype: object

Чтобы отфильтровать ряд частот слов, чтобы исключить стоп-слова, вы должны выполнить следующую строку кода:

words = words[words.index.values != stop_words.values]

Который выводит ваш исходный ряд частот слов, но без удаленных слов:

word1      89086
word500     1098
dtype: int64
...