Multiprocessing Pandas - передача df в функцию, изменение df в функции, возврат измененного df в процедуру - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь использовать многопроцессорность для повышения производительности моих вызовов API.

Буду очень признателен за любые советы по этому вопросу.

Ниже приведено общее представление о том, что делает программа, и более подробная информация для ознакомления:

data = pd.read_csv(filename, sep=";", converters={i: str for i in range(0, 156)})

for index, series in data.iterrows():
   #
   # this is where the api calls and calculations happen
   #

data.to_csv(filename, index=False, columns=headers)

ДляВ этом примере я скажу, что фрейм данных выглядит (х 10000 + строк):

data['Client_Code'] = 'ABCD'
data['Mode'] = 'Air'
data['Account_Number'] = 'ABC123'
data['Invoice Number'] = '987654321'
data['Tracking_Number'] = '1357924680' 
data['Delivered'] = ''

Пока у меня есть это для создания пула:

num_processes = multiprocessing.cpu_count()
chunk_size = int(data.shape[0]/num_processes)
chunks = [data.loc[data.index[i:i + chunk_size]] for i in range(0, data.shape[0], chunk_size)]

def func(x):
   for index, series in x.iterrows():
      #simulates api call
      x.at[index,'Delivered'] = 'Yes'
print(x['Delivered'])
return x


if __name__ == '__main__':
   pool = multiprocessing.Pool(processes=num_processes)
   result = pool.map(func, chunks)
   pool.close()
   pool.join()
   print(data['Delivered'])

1) AmЯ собираюсь сделать это правильным (наиболее эффективным) способом?

2) Как я могу получить данные обратно из функции?Так что я могу data.to_csv (имя файла, index = False, столбцы = заголовки)

Оператор печати в функции работает, но один за пределами не.

Спасибо

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