如何通过调整DataFrame层级将指定列嵌套为JSON对象?
解决方法
可以通过给DataFrame新增嵌套列、移除原列的方式实现,全程在DataFrame层级操作,无需直接处理JSON:
步骤说明
- 明确需要嵌套的目标列(
ON、1W、2W),将这些列打包成新的myObj列,每行的myObj值是包含对应列键值对的字典。 - 删除原来的
ON、1W、2W列。 - 执行你原本的JSON转换逻辑即可。
代码示例
假设你的meanCorrel结构如下(以date、category作为非嵌套列示例):
import pandas as pd # 模拟示例DataFrame data = { 'date': ['2024-01-01', '2024-01-02'], 'category': ['A', 'B'], 'ON': [0.8, 0.7], '1W': [0.6, 0.5], '2W': [0.4, 0.3] } meanCorrel = pd.DataFrame(data).set_index(['date', 'category'])
执行以下代码调整层级:
# 定义需要嵌套的列 nest_cols = ['ON', '1W', '2W'] # 新增myObj列并移除原嵌套列 meanCorrel_adjusted = meanCorrel.reset_index().assign( myObj=lambda df: df[nest_cols].to_dict('records') ).drop(nest_cols, axis=1) # 转换为目标格式JSON数组 result_json = meanCorrel_adjusted.to_json(orient='records')
结果验证
转换后的JSON结构如下:
[ { "date": "2024-01-01", "category": "A", "myObj": {"ON": 0.8, "1W": 0.6, "2W": 0.4} }, { "date": "2024-01-02", "category": "B", "myObj": {"ON": 0.7, "1W": 0.5, "2W": 0.3} } ]
优化说明
- 使用
assign+lambda的链式写法更简洁,可读性强。 to_dict('records')批量将行转为字典,比逐行apply处理效率更高,适合大数据量场景。
内容的提问来源于stack exchange,提问作者Crovish
相关产品推荐
相关产品推荐

