如何将Pandas DataFrame转换为API要求的指定嵌套JSON格式
问题原因
你当前代码的问题出在分组后调用to_dict(orient='records')的返回值上:即便每个ts分组仅对应1行数据,该方法也会返回包含单字典的列表,这就是你values字段变成列表结构的原因。
解决方案
方案1:修改原有groupby逻辑
只需在to_dict调用后取列表的第一个元素即可,修改后代码如下:
cols = df.columns.difference(['ts']) payload = (df.groupby(['ts'])[cols] .apply(lambda x: x.to_dict(orient='records')[0]) # 追加[0]取分组内的第一个字典元素 .reset_index(name='values') .to_dict(orient='records'))
方案2:更简洁的无groupby实现
观察你的样例数据可发现每行的ts值都是唯一的,没有重复的时间戳,完全不需要用到分组逻辑,直接按行遍历构造即可,性能更高:
cols = df.columns.difference(['ts']) payload = df.apply(lambda row: { "ts": row["ts"], "values": row[cols].to_dict() }, axis=1).tolist()
两种方案生成的payload都完全符合你给出的API要求格式。
内容的提问来源于stack exchange,提问作者Mark Morris
相关产品推荐
相关产品推荐

