Conversion de Django QuerySet en pandas DataFrame

Je vais convertir un Django QuerySet en un pandas DataFrame comme suit:

 qs = SomeModel.objects.select_related().filter(date__year=2012) q = qs.values('date', 'OtherField') df = pd.DataFrame.from_records(q) 

Cela fonctionne, mais y a-t-il un moyen plus efficace?

 import pandas as pd import datetime from myapp.models import BlogPost df = pd.DataFrame(list(BlogPost.objects.all().values())) df = pd.DataFrame(list(BlogPost.objects.filter(date__gte=datetime.datetime(2012, 5, 1)).values())) # limit which fields df = pd.DataFrame(list(BlogPost.objects.all().values('author', 'date', 'slug'))) 

Ce qui précède est comment je fais la même chose. L’addition la plus utile est de spécifier les champs qui vous intéressent. Si ce n’est qu’un sous-ensemble des champs disponibles qui vous intéressent, cela donnerait un coup de pouce aux performances, j’imagine.

Django Pandas résout ce problème plutôt net: https://github.com/chrisdev/django-pandas/

Du 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) 

Du sharepoint vue de Django (je ne suis pas familier avec les pandas ), ça va. Ma seule préoccupation est que si vous avez un très grand nombre d’enregistrements, vous risquez de rencontrer des problèmes de mémoire. Si tel était le cas, il serait nécessaire de recourir à un iterator de requête efficace en mémoire . (L’extrait de code tel qu’il est écrit peut nécessiter une réécriture pour permettre une utilisation intelligente de .values() ).

Vous pouvez peut-être utiliser 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()