如何将数据从mongodb导入pandas?

9 浏览
0 Comments

如何将数据从mongodb导入pandas?

我在mongodb的一个集合中有大量的数据,我需要对这些数据进行分析。如何将这些数据导入到pandas中?\n我对pandas和numpy都是新手。\n编辑:\nmongodb集合中包含带有日期和时间标签的传感器值。传感器值的数据类型是浮点型。\n示例数据:\n{\n\"_cls\" : \"SensorReport\",\n\"_id\" : ObjectId(\"515a963b78f6a035d9fa531b\"),\n\"_types\" : [\n \"SensorReport\"\n],\n\"Readings\" : [\n {\n \"a\" : 0.958069536790466,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:26:35.297Z\"),\n \"b\" : 6.296118156595,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 0.95574014778624,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:27:09.963Z\"),\n \"b\" : 6.29651468650064,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 0.953648289182713,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:27:37.545Z\"),\n \"b\" : 7.29679823731148,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 0.955931884300997,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:28:21.369Z\"),\n \"b\" : 6.29642922525632,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 0.95821381,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:41:20.801Z\"),\n \"b\" : 7.28956613,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 4.95821335,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:41:36.931Z\"),\n \"b\" : 6.28956574,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 9.95821341,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:42:09.971Z\"),\n \"b\" : 0.28956488,\n \"_cls\" : \"Reading\"\n },\n {\n \"a\" : 1.95667927,\n \"_types\" : [\n \"Reading\"\n ],\n \"ReadingUpdatedDate\" : ISODate(\"2013-04-02T08:43:55.463Z\"),\n \"b\" : 0.29115237,\n \"_cls\" : \"Reading\"\n }\n],\n\"latestReportTime\" : ISODate(\"2013-04-02T08:43:55.463Z\"),\n\"sensorName\" : \"56847890-0\",\n\"reportCount\" : 8\n}\n

0
0 Comments

如何从MongoDB导入数据到Pandas?

问题的原因:

根据PEP的原则,简单比复杂更好。在使用Pandas导入数据时,可以使用pd.DataFrame.from_records方法来从MongoDB中导入数据。然而,这种方法的效率较低且结果不一致,执行时间从800毫秒到1.9秒不等。对于大量的数据记录,这种方式不适用,因为它不会显示内存错误,而是会导致系统卡顿。

解决方法:

为了解决上述问题,我们可以使用pd.DataFrame(list(cursor))的方法来从MongoDB中导入数据。这种方法可以避免内存错误,并且更加稳定。以下是代码示例:

import pandas as pd
df = pd.DataFrame(list(cursor))

通过使用这种方法,我们可以更有效地将数据从MongoDB导入到Pandas中,同时避免系统卡顿和内存错误的问题。

0
0 Comments

如何将MongoDB中的数据导入到pandas?

当你想要将MongoDB中的数据导入到pandas DataFrame中时,你可以使用以下代码。这段代码对我有效,希望对你也有效。

import pymongo
import pandas as pd
from pymongo import MongoClient
client = MongoClient()
db = client.database_name
collection = db.collection_name
data = pd.DataFrame(list(collection.find()))

原因:在处理数据时,我们可能需要将MongoDB中的数据导入到pandas中进行分析和处理。这样可以方便我们使用pandas提供的强大功能来处理和分析数据。

解决方法:以上代码片段展示了如何使用pymongo和pandas库将MongoDB中的数据导入到pandas DataFrame中。首先,我们需要导入必要的库,包括pymongo和pandas。然后,我们使用MongoClient()函数来创建MongoDB的客户端连接。接下来,我们指定数据库名称和集合名称,并将其赋值给db和collection变量。最后,我们使用collection.find()函数获取集合中的所有文档,并使用list()函数将其转换为列表。然后,我们使用pd.DataFrame()函数将列表转换为pandas DataFrame对象,并将其赋值给data变量。这样,我们就成功地将MongoDB中的数据导入到了pandas DataFrame中。

希望本文对你理解如何将MongoDB中的数据导入到pandas提供了帮助。

0
0 Comments

如何从mongodb导入数据到pandas?

在使用pymongo库中,可以通过以下代码实现数据导入的功能:

import pandas as pd
from pymongo import MongoClient
def _connect_mongo(host, port, username, password, db):
    """连接MongoDB的工具函数"""
    if username and password:
        mongo_uri = 'mongodb://%s:%s@%s:%s/%s' % (username, password, host, port, db)
        conn = MongoClient(mongo_uri)
    else:
        conn = MongoClient(host, port)
    return conn[db]
def read_mongo(db, collection, query={}, host='localhost', port=27017, username=None, password=None, no_id=True):
    """从MongoDB读取数据并存储到DataFrame中"""
    # 连接MongoDB
    db = _connect_mongo(host=host, port=port, username=username, password=password, db=db)
    # 查询特定的数据库和集合
    cursor = db[collection].find(query)
    # 展开游标并构造DataFrame
    df = pd.DataFrame(list(cursor))
    # 删除_id列
    if no_id:
        del df['_id']
    return df

感谢,这就是我最终使用的方法。每行数据中还有一个嵌套文档的数组。所以我还必须在每行中进行迭代。有更好的方法吗?

能否提供一些mongodb结构的样本数据?

查看示例数据行的编辑。一个名为"Reading"的嵌套文档数组存储在readings中。现在我正在查询多个记录,然后对每个记录中的readings数组中的每个reading进行迭代。在我的情况下,有更简单的导入数据的方法吗?

注意到`df = pd.DataFrame(list(cursor))`中的`list()`将游标转换为列表或生成器,以保持CPU的冷却。如果你有大量的数据项,并且接下来的几行代码可以合理地对其进行划分、详细级别和裁剪,整个过程仍然是安全的。很好。

在`df = pd.DataFrame(list(cursor))`这行代码中非常慢。纯数据库查询要快得多。我们能把`list`转换为其他更快的方法吗?

那行代码也引起了我的注意。将一个设计为可迭代并且可能包装大量数据的数据库游标转换为内存中的列表对我来说似乎不太聪明。

我有一个大约15万行的游标,而仅将`list(cursor)`所用的时间就需要20秒,而查询只需要0.01秒。有没有更快的方法将mongodb数据加载到pandas DataFrame中?

使用`pd.DataFrame(iter(cursor))`的方式。除非您想使用类似dask的东西,以便永远不必将所有数据加载到内存中(大部分情况下)。

0