在JSON序列化中将一组带有新标题的列嵌套

时间:2018-07-16 08:12:46

标签: python json pandas nested to-json

我有这种Pandas数据框

    start    end   compDepth compReleaseDepth compMeanRate
0     0.0   0.62  58.0999985              1.5          110
1    0.66   1.34  57.1399994                3           94
2    1.42    2.1  57.1399994              2.5           89
3    2.21   2.87  58.5699997              2.5           79
4    2.97   3.65  55.2399979              3.5           77
5    3.78   4.45  53.8600006              1.5           76
6    4.49   5.17  62.2700005              0.5           81
7    5.97   6.65  56.1899986              2.5           85

我需要将数据序列化为JSON,并且我使用了df.to_json(orient='records'),并且工作正常。

但是,我想将最后3列嵌套到名为"annotations"的新标题中。这是我想要实现的,有没有简单的方法可以做到这一点?

[{
        "start": "0.0",
        "end": "0.62",
        "annotations": {
            "compDepth": "58.0999985",
            "compReleaseDepth": "1.5",
            "compMeanRate": "110"
        }
    }, {
        "start": "0.66",
        "end": "1.34",
        "annotations": {
            "compDepth": "57.1399994",
            "compReleaseDepth": "3",
            "compMeanRate": "94"
        }
    }, {
        "start": "1.42",
        "end": "2.1",
        "annotations": {
            "compDepth": "57.1399994",
            "compReleaseDepth": "2.5",
            "compMeanRate": "89"
        }
    }, {
        "start": "2.21",
        "end": "2.87",
        "annotations": {
            "compDepth": "58.5699997",
            "compReleaseDepth": "2.5",
            "compMeanRate": "79"
        }
    }, 

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用to_dict

将数据嵌套在新列中
df['annotations'] = df[['compDepth','compReleaseDepth','compMeanRate']].to_dict(orient='records')

然后,仅在最终输出中要使用的3列上使用to_json(orient='records')

df[['start','end','annotations']].to_json(orient='records')