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

Python 2.7下pandas json_normalize无法展平MongoDB数据stages字段

解决Python 2.7中pandas json_normalize展平MongoDB数据"stages"字段的问题

嘿,我之前在Python2.7环境里处理MongoDB嵌套数据时也碰到过一模一样的问题!其实核心原因是json_normalize默认不会自动识别并展平嵌套的数组型字段,得咱们手动指定要处理的路径才行。下面是我当时用的可行方案:

第一步:预处理MongoDB文档

MongoDB返回的文档里有ObjectId和ISODate这类特殊类型,直接传给json_normalize可能会出问题,先把它们转成可序列化的格式:

from bson.objectid import ObjectId

# 假设docs是你从MongoDB查询到的文档列表
processed_docs = []
for doc in docs:
    # 将ObjectId转为字符串
    doc["_id"] = str(doc["_id"])
    # 将ISODate转为字符串或datetime对象(按需选择)
    doc["versionDate"] = doc["versionDate"].isoformat()
    processed_docs.append(doc)

第二步:用record_path和meta参数展平数据

关键就在这里——通过record_path指定要展平的嵌套数组字段(也就是你的"stages"),再用meta参数列出需要保留的顶级字段,这样就能把stages的内容和其余数据一并展平:

from pandas.io.json import json_normalize

# 展平stages,同时保留其他顶级字段
df = json_normalize(
    processed_docs,
    record_path="stages",  # 指定要展平的嵌套数组路径
    meta=["_id", "niyoCustomerCompanyId", "version", "versionDate"],  # 保留的父级字段
    errors="ignore"  # 可选:如果部分文档没有stages字段,加上这个避免报错
)

举个例子,如果你的原数据里某条文档的stages是[{"stageId": 1, "status": "completed"}, {"stageId": 2, "status": "in_progress"}],处理后的数据框会生成两行,每行都包含_id、niyoCustomerCompanyId等顶级字段,同时带上stages里的stageId和status字段,完全实现了你要的“一并展平”效果。

补充说明

你说逐行处理能正常工作,其实是因为逐行时你手动完成了数组的拆分,而json_normalize需要明确的路径指引才能自动做这件事。另外要注意,Python2.7对应的最后一个pandas版本是0.24.2,这个版本是支持record_path和meta参数的,所以放心用就好。

内容的提问来源于stack exchange,提问作者Sudhakar Chavan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:29