Вставка 1М строк в фрейм данных с использованием подхода добавления списка слишком медленная - PullRequest
0 голосов
/ 27 марта 2020

Я хочу добавить около 1 миллиона строк в datafarme. Нынешний подход занимает много времени и является расщепляемым. Вот что я делаю:

Пример строки, которая будет добавляться в каждой итерации:

['Offer_5', 'Offer_4', 'Offer_12', 'Offer_8', 'Offer_10', 'Offer_2', 1000065]

Пример кода следующим образом:

cols = ['OFFER_CODE_1','OFFER_CODE_2','OFFER_CODE_3','OFFER_CODE_4','OFFER_CODE_5','OFFER_CODE_6','ID']

final_lst_appened = []
for index, row in df.iterrows():
    final_lst = []
    #some processing to get a row as stated above
    final_lst_appened.append(final_lst)

new_df = pd.DataFrame(columns=cols, data = final_lst_appened)

1 Ответ

0 голосов
/ 27 марта 2020

Небольшое снижение производительности может измениться iterrows() на itertuples, как описано здесь: https://medium.com/swlh/why-pandas-itertuples-is-faster-than-iterrows-and-how-to-make-it-even-faster-bc50c0edd30d. В противном случае, если код в for-l oop, где вы генерируете каждую строку, является тяжелым в вычислительном отношении, вы можете захотеть изучить многопроцессорность (https://docs.python.org/2/library/multiprocessing.html). Что-то вроде:

from multiprocessing import Pool
from os import cpu_count

with Pool(cpu_count()) as pool:
    pool.map(func, list(df.itertuples()))

Где func - это функция, которую вы применяете для генерации строки из исходной строки.

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