将数据框转换为嵌套的 json

时间:2021-04-06 14:27:27

标签: python json pandas

import pandas as pd
import numpy as np
arrays = [
    ["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
    ["one", "two", "one", "two", "one", "two", "one", "two"],
]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])
s = pd.DataFrame(np.random.randn(8,2), index=index)

我有一个多索引的数据框,我想将其转换为格式如下的 json:

{
  bar:{
        one:{
             [-0.682927 1.698052]
            }
...
...
...
      }

}

我尝试过

result = s.to_json(orient='index')


'{"["bar","one"]":{"0":-0.6829271378,"1":1.6980523944},"["bar","two"]":{"0":-1.9606477584,"1":-1.1012649579},"["baz","one"]":{"0":0.3183471185,"1":2.7179798601},"["baz","two"]":{"0":-0.5861751156,"1":-0.6979704724},"["foo","one"]":{"0":0.3188920615,"1":-0.0227116609},"["foo","two"]":{"0":-0.6144677884,"1":-1.4383361965},"["qux","one"]":{"0":1.9803476226,"1":1.169466069},"["qux","two"]":{"0":-1.6677933159,"1":-0.092154096}}'

但它变成了一个格式如下的json 我不知道如何使它成为嵌套的 json。

1 个答案:

答案 0 :(得分:2)

尝试:

s.agg(list,axis=1).unstack('first').to_json()

或:

s.agg(list,axis=1).unstack().to_json(orient='index')

输出:

{
  "bar":{
    "one":[
      -1.0231002147,
      0.4748832006
    ],
    "two":[
      0.541095365,
      -2.3872048015
    ]
  },
  "baz":{
    "one":[
      -1.4714562878,
      -0.6560521361
    ],
    "two":[
      -0.3157270757,
      0.0364883486
    ]
  },
  "foo":{
    "one":[
      -0.9160046224,
      0.1506959462
    ],
    "two":[
      -0.3462537931,
      -0.4722427983
    ]
  },
  "qux":{
    "one":[
      -1.2539589641,
      1.5472394925
    ],
    "two":[
      -0.646765898,
      -2.1194728724
    ]
  }
}