代码之家  ›  专栏  ›  技术社区  ›  Rob

panads数据帧与远程mongodb的高效交叉?

  •  0
  • Rob  · 技术社区  · 6 年前

    我在本地机器上有一个python数据帧,可以访问一个远程mongodb服务器,该服务器有我可以通过pymongo查询的额外数据。

    如果我的本地数据框很大,比如说每行有3列的40k行,那么检查本地数据框功能与包含数百万文档的远程集合的交集的最有效方法是什么?

    我在这里寻求一般建议。我想我可以从这3个特性中提取一个不同的值列表,然后在$or find语句中使用每个值,但是如果这3个特性中有一个有90k个不同的值,这似乎是个坏主意。

    所以任何意见都是非常受欢迎的。我没有权限将本地数据帧插入远程服务器,我只有选择/查找权限。

    非常感谢!

    1 回复  |  直到 4 年前
        1
  •  1
  •   DataPsycho    6 年前

    正如您已经解释过的,您将无法插入数据。所以唯一可能的是首先将唯一的值放到一个列表中。 df['column_name'].unique() $in 操作员输入 .find() 方法并将列表作为参数传递。如果需要时间或者太多。然后把你的单子分成等份,我是说单子的单子 [[id1, id2, id3], [id4, id5, id6] ... ] 做一个for循环 for sub-list in list: db.xyz.find({'key':{'$in': sublist}}, {'_id': 1}) 并使用子列表作为中的参数 接线员。然后对于每个迭代,如果值存在于db中,它将返回 _id 我们可以很容易地将其存储在一个空列表中并附加它,这样我们就可以在集合中存在值的情况下获得所有的id。

    所以我就是这么做的。不一定是最好的。