DataFrames Python - Как применить потоки / многопроцессорность здесь, чтобы ускорить процесс - PullRequest
1 голос
/ 20 сентября 2019

У меня есть DataFrame с миллионами строк, и я должен выполнить функцию для col_1 и col_2 каждой строки.Смотрите пример ниже.Предположим, что каждая функция занимает 2 секунды, а у меня 3 строки, поэтому в настоящее время это занимает 6 секунд.Я хочу использовать темы здесь, чтобы сократить время до 2 секунд.Что мне делать?

import pandas as pd
import time

def add(a,b):
    sum = a+b
    time.sleep(2) #just to show that in reality my function takes times
    print("sum of %d and %d is %d" %(a, b, sum))

data = [[10,10],[9,12],[100,13]]
df = pd.DataFrame(data,columns=['col_1','col_2'])

start_time = time.time()
df.apply(lambda x: add(x.col_1, x.col_2), axis=1)
print("--- %s seconds ---" % (time.time() - start_time))

1 Ответ

1 голос
/ 20 сентября 2019

ок, спасибо всем.Асинхронный подход сработал.

import pandas as pd
import time
from multiprocessing.dummy import Pool

pool_size = 5

pool = Pool(pool_size)


def add(a,b):
    sum = a+b
    time.sleep(2) #just to show that in reality my function takes times
    print("sum of %d and %d is %d" %(a, b, sum))

data = [[10,10],[9,12],[100,13]]
df = pd.DataFrame(data,columns=['col_1','col_2'])

start_time = time.time()
for ind in df.index:
     pool.apply_async(add, args=(df['col_1'][ind], df['col_2'][ind],))
pool.close()
pool.join()



print("--- %s seconds ---" % (time.time() - start_time))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...