You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pymongoarrow将Pandas Dataframe写入MongoDB遇ObjectId类型错误求助

使用Pymongoarrow写入DataFrame到MongoDB的类型错误解决方案

问题背景

从MongoDB读取包含ObjectId类型_id字段的DataFrame后,调用pymongoarrow.write方法写入新集合时触发类型转换错误,提示无法将bson.objectid.ObjectId转换为BSON格式。测试无自定义_id的简单数据集时代码可正常执行。

解决办法

1. 排除_id字段写入

如果不需要保留原数据的_id,直接删除该字段后写入,MongoDB会自动为新文档生成新的_id:

# 去掉_id字段后写入
write(db.new, df.drop(columns=['_id']))

2. 显式指定写入Schema

显式定义写入时的字段类型,和读取时的Schema保持一致,让pymongoarrow正确识别ObjectId类型:

from pymongoarrow.api import Schema
from bson.objectid import ObjectId

# 定义写入用的Schema
write_schema = Schema({'_id': ObjectId, 'age': int, 'name': str})
write(db.new, df, schema=write_schema)

3. 转换_id为字符串后写入(可选)

若业务允许将_id以字符串形式存储,先转换字段类型再写入:

# 将ObjectId转换为字符串
df['_id'] = df['_id'].astype(str)
write(db.new, df)

问题原因

从MongoDB读取的DataFrame中,_id字段存储的是Python原生的ObjectId对象,pymongoarrow的write方法默认类型推断逻辑无法正确识别该类型,导致BSON序列化失败。而测试用的简单数据集没有自定义_id,写入时MongoDB自动生成的_id会被pymongoarrow正确处理,因此不会报错。

内容的提问来源于stack exchange,提问作者Jeshurun Benedict

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:35:03