在MongoEngine文档构造中正确调用__set__。

2024-09-30 08:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我打算使用PythonMongoEngine框架在MongoDB中存储Pandas数据帧;通过df.to_list()将Pandas数据帧强制为Python Dict,并将它们存储为嵌套的文档属性。我正试图通过使用一个名为DataFrameField的自定义字段类型DataFrameField将Pandas数据帧强制到python dict并返回到__set____get__方法中的自定义字段类型DataFrameField,它是defined in this gist。在

当使用点表示法设置DataFrameField时,这非常有用,如:

import pandas as pd
import numpy as np
from mongoengine import *

a_pandas_data_frame = pd.DataFrame({
    'goods': ['a', 'a', 'b', 'b', 'b'],
    'stock': [5, 10, 30, 40, 10],
    'category': ['c1', 'c2', 'c1', 'c2', 'c1'],
    'date': pd.to_datetime(['2014-01-01', '2014-02-01', '2014-01-06', '2014-02-09', '2014-03-09'])
})

class my_data(Document):
        data_frame = DataFrameField() # defined in the referenced gist

foo = my_data()
foo.data_frame = a_pandas_data_frame

但是如果我把a_pandas_data_frame传递给构造函数,我得到:

^{pr2}$

如果我向print value方法添加一个print语句,并调用构造函数,它将打印:

['category', 'date', 'goods', 'stock']

{e>列的名称。有没有方法可以阻止MongoEngine文档构造函数传递传递传递给__set__方法的对象之外的其他内容?在

谢谢!在

另外,我在[MongoEngine Repo](https://github.com/MongoEngine/mongoengine/issues/1597)上也问过这个问题,但是有大约300个未解决的问题,所以我不确定我是否会很快在那个论坛上得到回应。。。在


Tags: to数据方法文档import类型pandasdata
1条回答
网友
1楼 · 发布于 2024-09-30 08:14:50

在源代码中,您需要在DataFrameField字段上定义to_python方法,否则它将返回到mongoengine.fields.DictField的{}方法。在

mongoengine.fields.DictFieldto_python方法基本上是ComplexBaseField^{} method。这个接收DataFrame的方法决定对象是sort of a list和{a3},这是通过枚举{}实例获得的。在

这是调用^{} on the field object的部分。在

if key in self._fields or key in ('id', 'pk', '_cls'):
    if __auto_convert and value is not None:
        field = self._fields.get(key)
        if field and not isinstance(field, FileField):
            value = field.to_python(value)

因此,您可以简单地将其定义为:

^{pr2}$

相关问题 更多 >

    热门问题