Преобразование Django QuerySet в pandas DataFrame

Я собираюсь преобразовать QuerySet Django в pandas DataFrame следующим образом:

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

Он работает, но есть ли более эффективный способ?

4 Solutions collect form web for “Преобразование Django QuerySet в pandas DataFrame”

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

Выше было то, как я делаю то же самое. Самое полезное дополнение – это указать, какие поля вам интересны. Если это только подмножество доступных полей, которые вам интересны, то это даст повышение производительности, я думаю.

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() 
  • как динамически обновлять график в цикле в ноутбуке ipython (в одной ячейке)
  • Назначить pandas dataframe column dtypes
  • Количество наиболее часто встречающихся 100 слов из предложений в Dataframe Pandas
  • HDF5 занимает больше места, чем CSV?
  • Как использовать pandas dataframes и массивы numpy в Rpy2?
  • Pandas DataFrame.unstack () Изменяет порядок заголовков строк и столбцов
  • как удалить избыточное время даты, когда ось x является недержанием pandas DatetimeIndex
  • Вычисление разницы во времени между двумя рядами
  • Python - лучший язык программирования в мире.