Django:从 Pandas 到 Django Rest 框架的模型查询集

Posted

技术标签:

【中文标题】Django:从 Pandas 到 Django Rest 框架的模型查询集【英文标题】:Django: Model Queryset to Pandas to Django Rest Framework 【发布时间】:2019-10-28 15:15:31 【问题描述】:

我正在尝试在我的 Django 项目中完成以下工作流程:

    查询我的数据库 将返回的查询集转换为 pandas 数据帧,以便执行一些计算和过滤 将最终数据帧传递给 Django REST API 框架

如果我理解正确,我必须在第 2 步中使用 django-pandas。在第 3 步中使用 Django REST Pandas。 我安装了两者并阅读了文档,但我不知道如何使它工作。

到目前为止,我已经完成了设置我的模型、视图、序列化和 url 以通过 Django Rest 框架呈现原始查询集。

如果有人能给我关于如何将 pandas 集成到这个工作流程中的提示,我们将不胜感激。

我的 models.py 文件

from django.db import models

class Fund(models.Model):
    name = models.CharField(max_length=100)
    commitment_size = models.IntegerField(blank=True, null=True)
    commitment_date = models.DateField(blank=True, null=True)

    def __str__(self):
        return self.name

我的views.py文件

from rest_framework import generics
from rest_framework.views import APIView

from pages.models import Fund
from .serializers import FundSerializer

class FundAPIView(generics.ListAPIView):
    queryset = Fund.objects.all()
    serializer_class = FundSerializer

我的 serializers.oy 文件

from rest_framework import serializers

from pages.models import Fund

class FundSerializer(serializers.ModelSerializer):
    class Meta:
        model = Fund
        fields = ('name', 'commitment_size', 'commitment_date')

【问题讨论】:

我不确定 pandas 是如何改变查询集的,但是看看覆盖 get_queryset() ,也许这就是你想要放置你的 pandas 逻辑的地方。 django-rest-framework.org/api-guide/filtering 【参考方案1】:

所以我想通了。首先需要安装django-pandas和django rest framework(但不需要安装django REST pandas)

models.py 和 serializers.py 文件与上面相同,但视图文件不同

from rest_framework.views import APIView
from rest_framework.response import Response

from django_pandas.io import read_frame   # Import django_pandas.io read frame

from pages.models import Fund
from .serializers import FundSerializer

class TestData(APIView):
    authentication_classes = []
    permission_classes = []

    def get(self, request, format=None):
        data = Fund.objects.all()        # Perform database query
        df = read_frame(data)            # Transform queryset into pandas dataframe 
        df['testcolumn'] = "testdata"    # Perform some Pandas Operation with dataframe
        return Response(df)              # Return the result in JSON via Django REST Framework

【讨论】:

以上是关于Django:从 Pandas 到 Django Rest 框架的模型查询集的主要内容,如果未能解决你的问题,请参考以下文章

django中使用pandas,将queryset转化为dataframe,Django-pandas

为 Django 模板中的 Highcharts 从 Pandas 数据帧格式化 JSON

使用带有 Pandas DF 的 Bootstrap-Table 的 Django 模板

Django JSON 文件到 Pandas 数据框

Django 熊猫 AWS

将 pandas 数据框传递给 Django 模板