将Django QuerySet转换为pandas DataFrame

我打算把Django QuerySet转换成一个pandasDataFrame ,如下所示:

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

它的工作,但是有一个更有效的方法?

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

以上是我如何做同样的事情。 最有用的补充是指定你感兴趣的领域。如果它只是你感兴趣的可用字段的一个子集,那么这将使我想象的性能提升。

Djangopandas解决这个很整齐: https : //github.com/chrisdev/django-pandas/

从自述文件:

 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的angular度来看(我不熟悉pandas ),这很好。 我唯一担心的是如果你有很多的logging,你可能会遇到内存问题。 如果是这种情况,那么沿着这种高效的内存查询集迭代器的方法就是必要的了。 (所写的代码片段可能需要重写以允许您聪明地使用.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()