如何将数据帧转换为 bson 文件?

问题描述 投票:0回答:1

我想将数据框转换为 bson 文件。

我正在使用名为“fundamentos”的库从网站提取数据。使用这个库返回一个数据框的方法,我想把这个数据框转换成一个 bson 文件。

我试图将此数据框转换为 json 文件,后来我将其转换为 bson 文件。但是这个bson文件的Id不是ObjectId,我需要它是一个ObjectId。有人知道这样做的不同方法吗?

mongodb dataframe bson
1个回答
1
投票

IIUC,fundementos 似乎返回一个

pandas.DataFrame
,因此您可以使用
to_dict
以及
json_util
来自 来制作您的 bson 文件:

#https://stackoverflow.com/a/12983651/16120011
#IMPORTANT NOTE: make sure to use the bson module installed by pymongo

import pandas as pd
from bson import ObjectId
from bson.json_util import dumps

df = pd.DataFrame({"userid": [4, 1, 3, 2], "username": ["foo", "bar", "baz", "qux"]})

#https://www.mongodb.com/docs/manual/core/document/#the-_id-field
df.insert(0, "_id", [ObjectId() for _ in range(len(df))])

with open("output.bson", "wb") as file:
    file.write(dumps(df.to_dict(orient="records")).encode("utf-8"))

输出:

print(df)
                        _id  userid username
0  6462bdcdf855f712f8505b6d       4      foo
1  6462bdcdf855f712f8505b6e       1      bar
2  6462bdcdf855f712f8505b6f       3      baz
3  6462bdcdf855f712f8505b70       2      qux

#output.bson
[{"_id": {"$oid": "6462bdcdf855f712f8505b6d"}, "userid": 4, "username": "foo"}, {"_id": {"$oid": "6462bdcdf855f712f8505b6e"}, "userid": 1, "username": "bar"}, {"_id": {"$oid": "6462bdcdf855f712f8505b6f"}, "userid": 3, "username": "baz"}, {"_id": {"$oid": "6462bdcdf855f712f8505b70"}, "userid": 2, "username": "qux"}]

要将 bson 文件作为 DataFrame 读回,您可以使用:

 from bson.json_util import loads

 with open("output.bson", "r") as b:
    dfback =  pd.DataFrame(loads(b.read()))

输出:

print(dfback)
                        _id  userid username
0  6462bdcdf855f712f8505b6d       4      foo
1  6462bdcdf855f712f8505b6e       1      bar
2  6462bdcdf855f712f8505b6f       3      baz
3  6462bdcdf855f712f8505b70       2      qux
© www.soinside.com 2019 - 2024. All rights reserved.