Pandas dataframe applymap параллельное выполнение - PullRequest
1 голос
/ 07 октября 2019

У меня есть следующие функции для применения набора регулярных выражений к каждому элементу во фрейме данных. Фрейм данных, к которому я применяю регулярные выражения, представляет собой блок размером 5 МБ.

def apply_all_regexes(data, regexes):
    # find all regex matches is applied to the pandas' dataframe
    new_df = data.applymap(
        partial(apply_re_to_cell, regexes))
    return regex_applied

def apply_re_to_cell(regexes, cell):
    cell = str(cell)
    regex_matches = []
    for regex in regexes:
        regex_matches.extend(re.findall(regex, cell))
    return regex_matches

Из-за последовательного выполнения applymap время обработки составляет ~ elements * (serial execution of the regexes for 1 element). Есть ли способ вызвать параллелизм? Я попытался ProcessPoolExecutor, но это заняло больше времени, чем выполнение поочередно.

1 Ответ

1 голос
/ 07 октября 2019

Вы пытались разделить один большой массив данных по количеству потоков на небольшие кадры данных, применить карту регулярных выражений параллельно и соединить каждый маленький df вместе?

Мне удалось сделать что-то похожее с кадром данных об экспрессии генов. Я бы запустил его в небольшом масштабе и контролировал бы, если бы вы получили ожидаемый результат.

К сожалению, у меня недостаточно репутации, чтобы комментировать

def parallelize_dataframe(df, func):
    df_split = np.array_split(df, num_partitions)
    pool = Pool(num_cores)
    for x in df_split:
        print(x.shape)
    df = pd.concat(pool.map(func, df_split))
    pool.close()
    pool.join()


    return df

Это общая функция, которую я использовал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...