次のように、Django QuerySet を pandas に変換DataFrame
します。
qs = SomeModel.objects.select_related().filter(date__year=2012)
q = qs.values('date', 'OtherField')
df = pd.DataFrame.from_records(q)
それは機能しますが、より効率的な方法はありますか?
Django Pandas はこれをうまく解決します: https://github.com/chrisdev/django-pandas/
README から:
class MyModel(models.Model):
full_name = models.CharField(max_length=25)
age = models.IntegerField()
department = models.CharField(max_length=3)
wage = models.FloatField()
from django_pandas.io import read_frame
qs = MyModel.objects.all()
df = read_frame(qs)
Djangoの観点から(私はよく知らないpandas
)、これは問題ありません。私の唯一の懸念は、レコードの数が非常に多い場合、メモリの問題が発生する可能性があることです。この場合、このメモリ効率の高いクエリセットイテレータに沿った何かが必要になります。(記述されたスニペットは、のスマートな使用を可能にするために、いくらかの書き直しが必要になる場合があります.values()
)。
おそらくmodel_to_dictを使用できます
import datetime
from django.forms import model_to_dict
pallobjs = [ model_to_dict(pallobj) for pallobj in PalletsManag.objects.filter(estado='APTO_PARA_VENTA')]
df = pd.DataFrame(pallobjs)
df.head()