python - 将数据从 MongoDB 游标加载到 pandas Dataframe 的更快方法

标签 python pandas mongodb performance dataframe

我正在尝试分析存储在 MongoDB 中的包含 150k 消息(约 40MB)的 Facebook 对话。我注意到将数据从 MongoDB 传输到 pandas 的时间很长(大约需要 25 秒),并且我发现 data = [msg for msg incursor] 是减慢该过程的步骤。

是否有更快的方法将 MongoDB 游标转换为 DataFrame?

这是我的一些代码:

from pymongo import MongoClient
import pandas as pd

connection = MongoClient(MONGODB_URI)
database = connection[DBS_NAME]
messages = database['messages']
cursor = messages.find(projection=FIELDS)
data = [msg for msg in cursor]
df = pd.DataFrame(data)

我也可以用 df = pd.DataFrame(list(cursor))df = pd.DataFrame.from_records(cursor) 替换此步骤,但仍然需要25秒。

我说它很慢,因为我想制作图表来显示谁发送的消息最多,并将它们放在网站中。我使用 Flask 在 Python 中进行分析,并将包含已处理数据的 json 传输到 JavaScript。这样,每次您进入网站时,它都会进行数据处理,我不希望在显示图表之前花费 25 秒。

最佳答案

在 mongodb 中而不是 Flask 中进行聚合

您可以将繁重的工作委托(delegate)给 mongodb,将数据从 mongodb 中取出需要 I/O,并且除非您的客户端和 mongo 服务器能够处理 40MB/秒,否则您无法将时间减少到亚秒。

db.getCollection('COLLECTION').aggregate([{$sortByCount: "$FIELD11"}, {$limit : 10}])

运行时间为 0.6 秒,大约有 30 万条记录

关于python - 将数据从 MongoDB 游标加载到 pandas Dataframe 的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080521/

相关文章:

python - 在 pandas 中查找一列中的共同值与另一列中的不同值

python - 意外的 Python KeyError

python - 如何使用 Pandas 将列添加为年月

python - 将结果从 python 写入 csv 文件 [UnicodeEncodeError : 'charmap' codec can't encode character

python - 在Python中对嵌套有序字典进行排序

python - 如何在 Python 中考虑正则表达式的重音字符?

java - mongodb中查询过滤数据

python - 关于QPixmap更改不透明度

javascript - 如何在 MongoDB 中查询引用的对象?

java - Spring data mongodb-复制集合