我想将数据框转换为 bson 文件。
我正在使用名为“fundamentos”的库从网站提取数据。使用这个库返回一个数据框的方法,我想把这个数据框转换成一个 bson 文件。
我试图将此数据框转换为 json 文件,后来我将其转换为 bson 文件。但是这个bson文件的Id不是ObjectId,我需要它是一个ObjectId。有人知道这样做的不同方法吗?
IIUC,fundementos 似乎返回一个
pandas.DataFrame
,因此您可以使用 to_dict
以及 json_util
来自 pymongo 来制作您的 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