gpt4 book ai didi

python - 插入 MongoDB 返回无法编码对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:07 24 4
gpt4 key购买 nike

我正在对源自 Python pandas DataFrame 的本地 MongoDB 进行相当简单的插入。本质上,我正在调用 datframe.loc[n].to_dict() 并直接从 df 获取我的字典。到目前为止一切都很好,直到我尝试插入,在那里我得到一个“无法编码对象”。直接查看 dict 显示一切看起来都很好但是后来(在写这个问题时)我突然检查了 dict 中的每个类型并发现一个长 ID 号已经转换为 numpy.int64 而不是一个简单的 int(当我手动创建了 dict,因为 int 会很好地插入)。

因此,我无法在 pandas 文档中找到任何关于向 to_dict 添加参数的内容,这将使我能够覆盖此行为,虽然有蛮力方法可以解决此问题,但必须有更 Eloquent 方法解决这个问题而不求助于那种事情。

然后问题是,如何将数据帧的一行转换为字典以插入到 MongoDB 中,确保我只使用可接受的内容类型......或者,我可以在这里进一步备份并使用更简单的方法来获取数据框的每一行是 Mongo 中的一个文档?

谢谢

根据要求,这是帖子的附录,其中包含我正在使用的数据示例。

{'Account Created': 'about 3 hours ago',
'Followers': 13,
'Following': 499,
'Screen Name': 'XXXXXXXXXX',
'Status': 'Alive',
'Tweets': 12,
'Twitter ID': 0000000000L}

这直接来自插入时出错的 to_dict 输出。我将其直接复制到“测试”字典中,效果非常好。如果我打印出每个字典的值,我会得到以下...

to_dict = ['Alive', 'a_aheref77', 'about 3 hours ago', 12, 13, 499, 0000000000L, ObjectId('551bd8cfae89e9370851aa64')]

test = ['Alive', 'XXXXXXXX', 'about 3 hours ago', 499, 13, 12, 0000000000, ObjectId('551bd6fdae89e9370851aa63')]

唯一的区别(据我所知)是 Long int,有趣的是,当我执行 Mongo 插入时,它在文档中显示该字段为“Number Long”。希望这有助于澄清问题。

最佳答案

看看 odo图书馆。特别是,the mongodb docs . Pandas 不太可能在不久的将来增加任何类型的 to_mongo 方法,因此 Odo 应该是这类功能的所在地。下面是一个简单的 DataFrame 示例:

In [13]: import pandas as pd

In [14]: from odo import odo

In [15]: df = pd.DataFrame({'a': [1, 2, 3], 'b': list('abc')})

In [17]: m = odo(df, 'mongodb://localhost/db::t')

In [18]: list(m.find())
Out[18]:
[{u'_id': ObjectId('551bfb20362e696200d568d9'), u'a': 1, u'b': u'a'},
{u'_id': ObjectId('551bfb20362e696200d568da'), u'a': 2, u'b': u'b'},
{u'_id': ObjectId('551bfb20362e696200d568db'), u'a': 3, u'b': u'c'}]

您可以通过以下方式获得所需的 deps 和 odo

conda install odo pymongo --channel blaze

pip install odo

关于python - 插入 MongoDB 返回无法编码对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29390738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com