Python 将通用数据帧传递给django REST API

Python 将通用数据帧传递给django REST API,python,django,pandas,django-rest-framework,Python,Django,Pandas,Django Rest Framework,我目前正在使用django和djangorestframework库构建RESTAPI。我想写一篇文章,接受pandas数据帧的JSON版本,这样我就可以调用数据帧上的其他库函数并返回一些输出 我知道,如果我知道dataframe的表结构,有一些很好的库可以将dataframe序列化并作为JSON返回,但我不确定如何将它们作为函数的参数接受 我目前的想法是将JSON作为字符串传递给基于函数的视图,然后从中提取JSON并将其作为数据帧进行解析。然而,我不知道这是否是最好的方法。我最大的麻烦是,我事

我目前正在使用django和djangorestframework库构建RESTAPI。我想写一篇文章,接受pandas数据帧的JSON版本,这样我就可以调用数据帧上的其他库函数并返回一些输出

我知道,如果我知道dataframe的表结构,有一些很好的库可以将dataframe序列化并作为JSON返回,但我不确定如何将它们作为函数的参数接受

我目前的想法是将JSON作为字符串传递给基于函数的视图,然后从中提取JSON并将其作为数据帧进行解析。然而,我不知道这是否是最好的方法。我最大的麻烦是,我事先不知道数据帧的结构,所以我不知道如何将它合并到一个模型中,也许某个库能够解释这个模型(尽管如果我知道结构的话,我仍然对这样做的方法感兴趣)

这是到目前为止我的代码

邮寄申请样本:

{
    "table": "{\"AAPL\":{\"1420156800000\":103.8639572404,\"1420416000000\":100.9379443592,\"1420502400000\":100.947444401,\"1420588800000\":102.3629506325,\"1420675200000\":106.2959679468},\"AMZN\":{\"1420156800000\":308.52,\"1420416000000\":302.19,\"1420502400000\":295.29,\"1420588800000\":298.42,\"1420675200000\":300.46},\"FB\":{\"1420156800000\":78.45,\"1420416000000\":77.19,\"1420502400000\":76.15,\"1420588800000\":76.15,\"1420675200000\":78.175},\"GOOG\":{\"1420156800000\":524.81,\"1420416000000\":513.87,\"1420502400000\":501.96,\"1420588800000\":501.1,\"1420675200000\":502.68},\"MSFT\":{\"1420156800000\":43.3443122802,\"1420416000000\":42.9410878182,\"1420502400000\":42.3153946875,\"1420588800000\":42.8530273035,\"1420675200000\":44.1136830927}}",
    "num_samples": 10
}
models.py:

class EFObject(models.Model):
    table = models.TextField()
    num_samples = models.IntegerField()
serializers.py:

class EFObjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = EFObject
        fields = ('table', 'num_samples')
views.py:

from rest_framework.response import Response
from rest_framework.decorators import api_view
from lib.api.serializers import *
import lib.analytics.analytics as analytics
import json
import pandas as pd

@api_view(http_method_names=['POST'])
def find_ef(request):
    serializer = EFObjectSerializer(data=request.data)
    serializer.is_valid()
    output = serializer.validated_data['table']
    num_samples = serializer.validated_data['num_samples']
    table = pd.read_json(output) 
    result = analytics.find_ef(table, num_samples) # returns a dictionary
    return Response(result)
URL.py:

from django.conf.urls import include, url
from rest_framework import routers
from lib.api import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    url(r'', include(router.urls)),
    url(r'api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'ef', views.find_ef)
]
这是可行的,但我的问题是我应该在view.py文件中真正做什么,因为这似乎不是获取数据帧的最佳方式(调用
table.to_JSON()
后正确转义数据帧的JSON字符串也是一件麻烦事)。任何帮助都将不胜感激