Как подсчитать количество повторений слов и присвоить номер и добавить в фрейм данных

У меня есть набор данных всех рефератов и пола автора. Теперь я хочу получить все повторения слов с учетом пола, чтобы я мог построить его в виде графика числа повторений слов по отношению к полу.

data_path = '/content/digitalhumanities - forum-and-fiction.csv'
def change_table(data_path):
  df = pd.read_csv(data_path)
  final = df.drop(["Title", "Author", "Season", "Year", "Keywords", "Issue No", "Volume"], axis=1)
  fin = final.set_index('Gender')
  return fin
change_table(data_path).T
This is the out put i got 
| Gender   | None                                              | Female                                            | Male                                              | None       | None                                  | Male                                              ,Female                                            |None                                              | Male                                             ,Female                                            |
|:----------|---------------------------------------------------|---------------------------------------------------|---------------------------------------------------|------------|---------------------------------------|---------------------------------------------------|---------------------------------------------------|---------------------------------------------------|---------------------------------------------------|---------------------------------------------------:|
| Abstract | This article describes Virginia Woolf's preocc... | The Amazonian region occupies a singular place... | This article examines Kipling's 1901 novel Kim... | Pamela; or | Virtue Rewarded uses a literary fo... | This article examines Nuruddin Farah's 1979 no... | Ecological catastrophe has challenged the cont... | British political fiction was a satirical genr... | The Lydgates have bought too much furniture an... 

Теперь, как я могу получить повторение каждого слова в абстракте по отношению к полу и добавить к фрейму данных.

Ожидаемый пример вывода

|gender|male|female|none|
|------|----|------|----|
| This    |    3|     0|   0|
|   occupies  |    5|     3|   0|
| examines    |    6|      0|   0|
|   British  |    0|      0|    7|

. . . Как подсчитать количество повторений слов и присвоить номер и добавить в фрейм данных

pd.crosstab([df['Gender'], df['Words']) ?
ansev 17.03.2022 08:24

Какая-то проблема с решением?

jezrael 17.03.2022 09:12

@jezrael у меня есть несколько столбцов, в которых и женщины, и мужчины также разделены запятой.

daylightisminetocommand 17.03.2022 09:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте crosstab с разделением сложенных значений на DataFrame.stack:

#removed T
df = change_table(data_path)

#reshape with split columns
df = (df.stack()
        .rename_axis(('Type','Gender'))
        .str.split(expand=True)
        .stack()
        .reset_index(name='Word'))

#explode Type by split with ,
df = df.assign(Type = df['Type'].str.split(',')).explode('Type')

#remove stpowords
from nltk.corpus import stopwords    
stop_words = set(stopwords.words('english'))
    
df = df[~df['Word'].isin(stop_words)]

#remove punctuation
df['Word'] = df['Word'].str.replace(r'[^\w\s]+', '')

#get counts per Gender, Word and Type
df1 = pd.crosstab([df['Gender'], df['Word']], df['Type']).reset_index()

#or get counts per Word and Type
df2 = pd.crosstab([df['Word'], df['Type'])

Учитывали ли вы, что в некоторых столбцах мужчины и женщины разделены запятой? Мне нужно разделить его и добавить как к мужскому, так и к женскому полу и назначить количество слов. И когда я проверяю данные после разделения, я получаю специальные хартии и стоп-слова, а также как их удалить. @jezrael

daylightisminetocommand 17.03.2022 09:13

@daylightisminetocommand — добавлено, чтобы взорвать ответ, набрав , и удалив стоп-слова. Что значит специальные символы? Можете ли вы объяснить больше?

jezrael 17.03.2022 09:25

?, " ", . , : , /, { , } , !, #, %, & . Эти символы присутствуют в моем тексте, и я хочу удалить их @jezrael

daylightisminetocommand 17.03.2022 09:29

Я добавил изображение. Пожалуйста, посмотрите, вы поймете, что я имею в виду специальные символы и почему я хочу, чтобы их удалили.

daylightisminetocommand 17.03.2022 09:31

@daylightisminetocommand — для удаления знаков препинания используйте df['text'] = df['text'].str.replace(r'[^\w\s]+', '') — решение от это

jezrael 17.03.2022 10:13

Другие вопросы по теме