Я рассчитал вышеприведенный и еще один ответ и делюсь результатами:
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 секунды.