DataFrame - удалить строки, содержащие стоп-слова или цифры в столбце «слово» - PullRequest
2 голосов
/ 24 марта 2020

У меня есть датафрейм с двумя столбцами (слова и подсчитать, как эти слова), упорядоченные по количеству:

    Word            Count
0   the             5337
1   boy             895
2   who             5891
3   lived           3150
4   mr              3443
... ... ...
6049    manner      3256
6050    holiday     2702
6051    347         276
6052    spreading   4937
6053    348         277

Что я хочу, это удалить стоп-слова и цифры ( как «347» и «348»). например, в примере удалите строки 0, 2, 6051, 6053 ('the', 'who', '347', '348').

Вот как я создал DataFrame:

count_words_dict = {'the': 5337, 'boy': 895, 'who': 5891, 'lived': 3150, 'mr': 3443, 'and': 462, 'mrs': 3444, 'dursley': 1797, 'of': 3618, 'number': 3599, 'four': 2240, 'privet': 4007, 'drive': 1749, 'were': 5842, 'proud': 4034, 'to': 5431, 'say': 4397, 'that': 5336, 'they': 5346}
df = pd.DataFrame(list(count_words_dict.items()), columns = ['Word','Count'])
df.sort_values(by=['Count'], ascending=False)
df.reset_index(drop=True)

Я также получил стоп-слова:

!pip install nltk
import nltk
nltk.download("stopwords")

from nltk.corpus import stopwords
stops =  set(stopwords.words('english'))

Но как я могу удалить эти стоп-слова (и предпочтительно цифры) из кадра данных?


В этом посте я видел, что им удалось удалить стоп-слова из набора твитов Трампа, но мне не удалось заставить его код работать с моим набором данных. Это его код:

from sklearn.feature_extraction.text import CountVectorizer
from nltk.corpus import stopwords
stops =  set(stopwords.words('english')+['com'])
co = CountVectorizer(stop_words=stops)
counts = co.fit_transform(data.Tweet_Text)
pd.DataFrame(counts.sum(axis=0),columns=co.get_feature_names()).T.sort_values(0,ascending=False).head(50)

1 Ответ

2 голосов
/ 24 марта 2020

Используйте pandas.Series.isin с pandas.Series.str.isnumeric, чтобы сначала удалить слова, соответствующие списку stopwords, а затем исключить числовые значения c из столбца Word:

count_words_dict = {'the': 5337, 'boy': 895, 'who': 5891, 'lived': 3150, 'mr': 3443, 'and': 462, 'mrs': 3444, 'dursley': 1797, 
                    'of': 3618, 'number': 3599, 'four': 2240, 'privet': 4007, 'drive': 1749, 'were': 5842, 'proud': 4034, 
                    'to': 5431, 'say': 4397, 'that': 5336, 'they': 5346, '345':200, '555':1000}

df = pd.DataFrame(list(count_words_dict.items()), columns = ['Word','Count'])
df.sort_values(by=['Count'], ascending=False)
df.reset_index(drop=True)

from nltk.corpus import stopwords
stops =  list(stopwords.words('english'))
df = df[~df['Word'].isin(stops)]
df = df[~df['Word'].str.isnumeric()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...