Python Pandas / tqdm показывает прогресс для извлечения

1

У меня огромная серия панд из 1007 миллионов строк строк. Я запускаю экстракт регулярного выражения на нем (поэтому задача независима от порядка строк, ее можно запускать параллельно), которая занимает несколько часов и выглядит так:

df["big_string_column"].str.extract(r"Name: (.*), Value: (.*)") 

или же

df["big_string_column"].str.extractall(r"Name: (.*), Value: (.*)")

это возвращает новый DataFrame с двумя группами захвата и столбцами.

Есть ли способ использовать tqdm или что-то еще, чтобы показать прогресс для этого? :)

Может ли это быть реорганизовано в dataframe.progress_apply, который сохраняет группы захвата из регулярных выражений без значительных ударов производительности (поскольку pd.Series.str.extract оптимизирует регулярное выражение) или существует совершенно другой подход?

  • 0
    Также всегда приятно, если это можно превратить в пьяную вещь из панд.
Теги:
pandas
tqdm

1 ответ

1
Лучший ответ

Я не знаю о функциях отчета о проделанной работе .str.extract. Изменение его в .apply для использования .progress_apply может иметь плохие .progress_apply производительности.

Это не симпатичный или однострочный, но если выполняемая работа независима от строки (без группировки), вы всегда можете просто разбить df на куски, выполнять работу независимо на кусках и объединить их обратно на конец. Затем вы можете отслеживать ход выполнения куском с помощью tqdm.

Что-то вроде этого:

# 1000 sections as an example, may need to adapt to your problem
chunks = np.array_split(df, 1000)

processed = []
for chunk in tqdm(chunks):
    processed.append(chunk.str.extract(r"Name: (.*), Value: (.*)"))

out = pd.concat(processed)
  • 0
    Нет, я не могу разбить его на куски из-за накладных расходов, и работа не зависит от строки, как вы можете видеть из регулярного выражения, оно должно применять каждое регулярное выражение к строке
  • 0
    Спасибо за информацию, хотя, разбиение ее на куски влечет за собой дополнительную нагрузку на выполнение pd.concat и я думаю, что ваш ответ сработает, поскольку у большинства людей недостаточно ОЗУ, поэтому они разбивают информационный кадр на куски, но я запускаю работу это раскручивает кластер с достаточным объемом оперативной памяти 300 Гб, а затем после задания ~ 3 часа $ 10 отключается. Я надеялся узнать, знает ли кто-нибудь другой «хороший» способ сделать это, поэтому я одобряю, но жду лучших ответов, если таковые имеются.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню