Как получить кумулятивные уникальные слова из столбца фрейма данных, в котором содержится более 500 слов на каждый. Dataframe имеет ~ 300 000 строк
Я прочитал файл csv в фрейме данных со столбцом A, имеющим текстовые данные. Я попытался создать пару столбцов (B & C), прокручивая столбец A и беря уникальные слова из столбца A как набор и добавляя столбец B с уникальными словами и столбец C с количеством
Впоследствии я беру уникальные слова, взяв столбец A и столбец B (объединение) из предыдущей строки (набора).
Это работает для небольшого количества строк. Но как только количество строк превышает 10 000, производительность снижается, и ядро в конце концов умирает.
Есть ли лучший способ сделать это для огромного фрейма данных?
Пытался создать отдельный фрейм данных только с уникальными словами и количеством, но все еще есть проблема
Образец кода:
for index, row in DF.iterrows():
if index = 0:
result = set(row['Column A'].lower().split()
DF.at[index, 'Column B'] = result
else:
result = set(row['Column A'].lower().split()
DF.at[index, 'Cloumn B'] = result.union(DF.loc[index -1,
'Column B'])
DF['Column C'] = DF['Column B'].apply(len)
Извините, разместил код
Итак, вам нужны только все уникальные значения «столбца» из фрейма данных?
Совокупное уникальное значение из столбца A и совокупное количество уникальных слов из столбца A
Вы можете использовать CountVectorizer и впоследствии сделать кумулятивную сумму.
Узнайте больше о CountVectorizer: https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html И совокупная сумма панд: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.cumsum.html
CountVectorizer работает, только если мне нужно получить уникальное количество слов для каждого столбца. Мне нужно получить совокупные слова для всех предыдущих строк в столбце B. получить сумму относительно легко, когда я использую слова
Не могли бы вы предоставить образец данных для проверки вашего кода?
Используйте уникальность ключей словаря для накопления слов.
Я создаю словарь cumulative_words
, в котором я хочу хранить уникальные слова построчно, обновляя его словарями, имеющими ключи, состоящие из уникальных слов из заданного предложения строки.
Код:
cumulative_words = {}
def cumulate(x):
cumulative_words.update(dict.fromkeys(set(x.lower().split())))
return list(cumulative_words.keys())
df["Column B"] = df["Column A"].apply(cumulate)
df["Column C"] = df["Column B"].apply(len)
Учитывая, что вы сказали, что этот код все еще имеет проблемы с памятью при ~ 200 тыс. строк, Я попробую что-то очень простое, чтобы понять немного больше:
Создайте словарь с уникальными словами перед операциями с кадрами данных
cumulative_words = {}
for x in df["Column A"].values:
cumulative_words.update(dict.fromkeys(set(x.lower().split())))
Если это все еще ломается, я думаю, нам нужно изменить метод
Я думаю, что это критическая точка, потому что она создает список из списков примерно из миллиардов слов.
cumulative_words = {}
cumulative_column = []
for x in df["Column A"].values:
cumulative_words.update(dict.fromkeys(set(x.lower().split())))
cumulative_column.append(cumulative_words.keys())
df["Column B"] = cumulative_column
df["Column C"] = df["Column B"].apply(len)
Может быть, слишком много слов для хранения, и фрейм данных не может быть создан, или я не знаю, как это сделать. Дайте мне знать
Решение от Lante дало лучший результат, чем мои предыдущие попытки. Не идеально, так как он все еще ломается на ~ 200 тыс. строк.
Рад, что вы оценили мой вариант, но мне любопытно, что произойдет, когда он сломается?
Либо ядро умирает, либо ошибка памяти при работе в ноутбуке Jupyter
Я добавил пару вещей, которые я бы сделал
выложи свой код, не описывай его. Также опубликуйте минимальный, полный и проверяемый пример