JSON 到堆叠数据帧

JSON to Stacked DataFrame

我有一个 JSON 文件,如下所示:

[

        {
        "id" : "abc",
        "mood" : "happy",
        "scores" : [
            10,
            15,
            20
            ]
        },
        {
        "id" : "def",
        "mood" : "happy",
        "scores" : [
            103,
            150,
            200
            ]
        },
        {
        "id" : "ghi",
        "mood" : "sad",
        "scores" : [
            1,
            15,
            20,
            45,
            600,
            1400
            ]
        },
        {
        "id" : "jkl",
        "mood" : "sad",
        "scores" : [
            10,
            100,
            1000,
            10000
            ]
        }

]

我正在尝试进入一个看起来像这样的堆叠 DataFrame:

    id    mood    score
0  abc    happy   10
1  abc    happy   15
2  abc    happy   20
3  def    happy   103
...
14 jkl    sad     10
15 jkl    sad     100

等等

但是,当我将 JSON 对象粘贴到数据框中时,我总是会得到一些变化:

其中 "scores" 列是一个列表。我为示例搜索了很长时间,但无法弄清楚如何将列表解压缩为我想要的格式。

建议?

一种方法是为列表中的每个条目创建一个数据框,然后将它们连接起来:

>>> pd.concat([pd.DataFrame(d) for d in data])

不过,这似乎很浪费,因为您为每个条目分配了一块内存,只是为了在最后将它们连接起来。或者,您可以定义一个生成器:

def iter_data(data):
    for entry in data:
        for score in entry['scores']:
            yield entry['mood'], entry['id'], score

这样

>>> pd.DataFrame(iter_data(data))

    id   mood  scores
0  abc  happy      10
1  abc  happy      15
2  abc  happy      20
0  def  happy     103
1  def  happy     150
2  def  happy     200
0  ghi    sad       1
1  ghi    sad      15
2  ghi    sad      20
3  ghi    sad      45
4  ghi    sad     600
5  ghi    sad    1400
0  jkl    sad      10
1  jkl    sad     100
2  jkl    sad    1000
3  jkl    sad   10000