如何将MongoDB嵌套文档转换为Python Pandas扁平化DataFrame表格
实现方法
方法1:直接用json_normalize处理MongoDB查询结果(最优方案)
你不需要先转成DataFrame再二次处理,直接把MongoDB返回的查询结果传给json_normalize,就能自动扁平化所有嵌套字段:
import pandas as pd from pandas import json_normalize # 直接读取MongoDB数据并完成扁平化展开 data = list(db.collection_name.find({})) df = json_normalize(data) print(df)
这个方法会自动把嵌套的address字段拆分为address.number、address.street、address.city三个独立列,完全匹配你需要的输出格式,不需要额外编写拆分逻辑。
方法2:针对已生成的原始DataFrame拆分address列
如果已经拿到了带完整address列的原始DataFrame,可以用以下代码手动完成拆分:
# 将address列的字典内容转为独立DataFrame,和原表拼接后删除原始address列 address_df = df['address'].apply(pd.Series) address_df.columns = [f'address.{col}' for col in address_df.columns] df = pd.concat([df.drop('address', axis=1), address_df], axis=1)
后续处理思路
- 空值处理:如果部分文档没有address字段、或者address下缺少某个子字段,
json_normalize会自动填充NaN,可以根据业务需求填充默认值或者删除无效空行 - 多层嵌套扩展:如果存在更深层级的嵌套结构,
json_normalize同样支持自动展开,不需要修改核心处理代码 - 字段重命名:如果不需要
address.这类前缀,展开完成后直接修改columns属性即可批量重命名列名 - 性能优化:如果数据量较大,可以在MongoDB查询阶段就用
$project运算符筛选需要的字段,能大幅降低Python端的处理压力
内容的提问来源于stack exchange,提问作者usmansharif shaik
相关产品推荐
相关产品推荐

