109 votes

Conversion de Django QuerySet en pandas DataFrame

Je vais convertir un Django QuerySet en un DataFrame pandas 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 existe-t-il un moyen plus efficace?

113voto

lexual Points 1849
 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 la façon dont je fais la même chose. L'ajout le plus utile consiste à 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 une amélioration des performances, j'imagine.

2voto

David Eyk Points 3166

Du point de vue de Django (je ne connais pas pandas ), ça va. Ma seule préoccupation est que si vous avez un très grand nombre d'enregistrements, vous pouvez rencontrer des problèmes de mémoire. Si tel était le cas, quelque chose dans le sens de cet itérateur de jeu de requêtes efficace en mémoire serait nécessaire. (L'extrait tel qu'il est écrit peut nécessiter une réécriture pour permettre une utilisation intelligente de .values() ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X