如何在pandas中创建嵌套DataFrame并转换为目标嵌套JSON格式
解决方法
你之前的操作会生成点分隔的平级字段,是因为Pandas不会自动将带.的列名识别为嵌套结构,只会将其作为普通字符串字段名处理。正确操作步骤如下:
1. 生成嵌套的info列
直接对每行数据做处理,将dob字段封装为字典格式存入新的info列:
df['info'] = df.apply(lambda x: {'dob': x['dob']}, axis=1)
提示:如果数据量较大(如你场景中的10万条),可以用列表推导式替代
apply大幅提升处理效率:df['info'] = [{'dob': dob_val} for dob_val in df['dob']]
2. 清理不需要的字段
删除原始的dob字段以及不需要的extra字段:
df = df.drop(columns=['dob', 'extra'])
3. 导出为符合要求的嵌套JSON
导出时指定orient='records'参数,Pandas会自动将字典类型的列转为嵌套JSON对象:
# 直接生成JSON字符串 result_json = df.to_json(orient='records', force_ascii=False) # 导出到本地文件,可加indent参数格式化输出 df.to_json('output.json', orient='records', force_ascii=False, indent=2)
完整可运行示例
import pandas as pd import json # 模拟你提供的原始数据 raw_data = [ {'id':0, 'name':'Albert', 'last_name':'Einstein', 'dob':1903, 'extra':{'field1': 1}}, {'id':100000, 'name':'Zooey', 'last_name':'Deschanel', 'dob':1980, 'extra':{'field1': 1}} ] df = pd.DataFrame(raw_data) # 处理嵌套结构 df['info'] = [{'dob': dob_val} for dob_val in df['dob']] df = df.drop(columns=['dob', 'extra']) # 验证输出结构 print(json.loads(df.to_json(orient='records')))
运行后输出完全符合要求的结构:
[{'id': 0, 'name': 'Albert', 'last_name': 'Einstein', 'info': {'dob': 1903}}, {'id': 100000, 'name': 'Zooey', 'last_name': 'Deschanel', 'info': {'dob': 1980}}]
内容的提问来源于stack exchange,提问作者bekon
相关产品推荐
相关产品推荐

