JSON到Stacked DataFrame

时间:2015-11-25 23:27:50

标签: python json pandas data-analysis

我有一个类似的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对象粘贴到数据帧中时,我总是会得到一些变体:

example output

"得分"列是一个列表。我一直在努力搜索一个例子,但无法弄清楚如何将列表解压缩成我想要的格式。

建议?

1 个答案:

答案 0 :(得分:1)

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

>>> 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