Векторизованное решение для сохранения панд DataFrame за строкой в ​​виде объектов модели Django - PullRequest
0 голосов
/ 06 мая 2019

В поисках руководства по векторизованным решениям для создания объектов модели Django из pFD DataFrame по одному на строку.

Я искал похожие вопросы и связанные с ними ответы.

Я нашел https://stackoverflow.com/a/34431482/2193381, но я не хочу жестко задавать URL базы данных и т. Д. И ищу другие решения.

Лучшее, что я могу придумать, до сих пор использует .apply и выглядит так:

def qux(row):
    return MyDjangoModel(
        foo=row['foo'],
        bar=row['bar']
    )

data['obj'] = data.apply(qux, axis=1)

MyDjangoModel.objects.bulk_create(
    list(data['obj']),
    ignore_conflicts=True
)

Есть ли лучший способ?

1 Ответ

0 голосов
/ 07 мая 2019

Я рассчитал вышеприведенный и еще один ответ и делюсь результатами:

num of rows: 31,940

pd.read_csv(): 6.757 seconds
.apply(qux)(): 1.783 seconds 
bulk_create(): 3.560 seconds

Возможно, лучшая альтернатива:

rawlist = data.to_dict('records')

objlist = [MyDjangoModel(foo=row['foo'], bar=row['bar']) for row in rawlist]

MyDjangoModel.objects.bulk_create(objlist, ignore_conflicts=True)

Понимание списка заняло меньше времени - 1,011 секунды.

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