python - concatenate - Conversión de Django QuerySet a pandas DataFrame
format django datetimefield (4)
Desde la perspectiva de Django (no estoy familiarizado con los pandas
) esto está bien. Mi única preocupación es que si tiene una gran cantidad de registros, puede tener problemas de memoria. Si este fuera el caso, sería necesario algo similar a este iterador de conjunto de consulta eficiente en memoria . (El fragmento tal como está escrito podría requerir alguna reescritura para permitir el uso inteligente de .values()
).
Voy a convertir un Django QuerySet en un DataFrame
siguiente manera:
qs = SomeModel.objects.select_related().filter(date__year=2012)
q = qs.values(''date'', ''OtherField'')
df = pd.DataFrame.from_records(q)
Funciona, pero ¿hay una manera más eficiente?
Django Pandas lo resuelve bastante bien: https://github.com/chrisdev/django-pandas/
Del LÉAME:
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)
Quizás puedas usar 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()
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'')))
Lo anterior es cómo hago lo mismo. La adición más útil es especificar qué campos le interesan. Si solo se trata de un subconjunto de los campos disponibles que le interesan, esto supondría un aumento del rendimiento, imagino.