pandas dataframe作为django中的字段

rah*_*hem 5 python arrays django pandas

我想在django模型中添加pandas dataframe(或numpy数组)作为字段.django中的每个模型实例都有一个与之关联的大尺寸2D数组,因此我想将其存储为numpy数组或pandas数据帧.

请指导我如何实现它.我在下面试过,但它不起作用.

from django.db import models
import numpy    
class datafile(models.Model)
    filename = models.CharField(max_length=50)
    data = numpy.array((1000,1000))
Run Code Online (Sandbox Code Playgroud)

我正在从excel文件中读取数据并将其设置为views.py中的数据变量,但在保存模型后,数据的值不会更新.问候,拉胡尔

Kev*_*one 8

您可能想要使用PickleField来存储您的numpy或Pandas数据帧.PickleField会将数据序列化为数据库存储的文本字段,并在检索时将其转换回来.

from django.db import models
from picklefield.fields import PickledObjectField
import numpy

class DatafileModel(models.Model)
    data = PickledObjectField()
Run Code Online (Sandbox Code Playgroud)

然后使用numpy或pandas对象创建或操作模型实例:

datafile = DatafileModel()
datafile.data = numpy.array((1000,1000))
datafile.save()
Run Code Online (Sandbox Code Playgroud)


Dan*_*yuk 5

为了不必单独创建模型实例,可以使用以下简单方法


import pandas as pd
from django.contrib.postgres.fields import JSONField

class StoredDataFrame(Model):
    data = JSONField()

    @classmethod
    def putframe(cls, dataframe):
        storeddataframe = cls(data=dataframe.to_json(orient='split'))
        storeddataframe.save()
        return storeddataframe

    def loadframe(self):
        return pd.read_json(self.data, orient='split')
Run Code Online (Sandbox Code Playgroud)

使用示例:


    df = pd.DataFrame(np.random.randn(6,4), index=list('qwerty'), columns=list('ABCD'))
    storeddata = StoredDataFrame.putframe(df)
    retrieveddataframe = storeddata.loadframe()
Run Code Online (Sandbox Code Playgroud)