Самая быстрая итерация на фрейме данных с применением функции URL - PullRequest
0 голосов
/ 23 января 2020

Мне нужно запросить некоторые данные из URL, вставив переменную = var для каждой строки моего фрейма данных. Я написал функцию, которая перебирает каждую строку

def df_eval(data):
    data_eval = data.copy()
    df_price = []
    for i in data_eval.index:
        var = data_eval.at[i, 'var']
        url = ("http://blablabla/params&cid={}".format(var))
        r_json = requests.get(url).json()
        df = json_normalize(r_json)
        df_price.append(df['price'])
        print(df_price)

data_eval['price_eval'] = df_price
return data_eval

Не могли бы вы предложить более быстрый способ для этой операции. В настоящее время это занимает около 30 минут на 23000 строк.

1 Ответ

0 голосов
/ 23 января 2020

Вы можете парализовать ваши звонки так:

import random
import pandas as pd
import numpy as np
from multiprocessing import Pool

data_split = np.array_split(data, n_cores)
pool = Pool(n_cores)
data = pd.concat(pool.map(df_eval, data_split))
pool.close()
pool.join()

Источник: https://towardsdatascience.com/make-your-own-super-pandas-using-multiproc-1c04f41944a1

...