如何将DataFrame转换为值为列表嵌套列表格式的JSON?
将DataFrame转换为指定格式的JSON
需求说明
现有包含Name、ts、value列的DataFrame,需要转换为以下结构的JSON对象:
[ { "name": "ABC", "data": [ [1506709800000, null], [1514658600000, 756.98], [1522434600000, null], [1530297000000, null] ] }, { "name": "EFG", "data": [ [1506779800000, 789], [152368600000, 412.98], [16245834600000, 512], [19874567000000, null] ] } ]
问题分析
你之前尝试的代码生成了带列名的字典列表,不符合需求:
(df.groupby('Name')[['ts','value']] .apply(lambda x: x.to_dict('records')) .to_json(orient="index"))
问题出在to_dict('records')会把每行数据转为{'ts': 值, 'value': 值}的字典结构,而我们需要的是无列名的嵌套列表。
解决方案
方法一:循环分组处理
import pandas as pd import json # 假设你的DataFrame为df result = [] for name, group in df.groupby('Name'): # 将每组的ts和value转为嵌套列表 data_list = group[['ts', 'value']].values.tolist() result.append({ "name": name, "data": data_list }) # 生成格式化的JSON字符串 json_output = json.dumps(result, indent=4) print(json_output)
方法二:链式写法简化代码
import pandas as pd import json result = (df.groupby('Name') .apply(lambda x: { "name": x.name, "data": x[['ts', 'value']].values.tolist() }) .tolist()) # 生成格式化的JSON字符串 json_output = json.dumps(result, indent=4) print(json_output)
代码说明
groupby('Name')按名称分组,每个分组的x.name即为当前分组的名称值x[['ts', 'value']].values.tolist()直接提取两列的数值,将每行转为[ts值, value值]的列表,最终组成嵌套列表,完美匹配目标格式的data字段tolist()将分组后的结果转为列表,再通过json.dumps生成带缩进的格式化JSON字符串
内容的提问来源于stack exchange,提问作者Shivam Agrawal
相关产品推荐
相关产品推荐

