Python 将选定的JSON标记转换为数据帧

Python 将选定的JSON标记转换为数据帧,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我有一个类似- [ { "key": "033298fd-f792-4343-b145-852e9cdb680a", "value": { "total": 15452, "history": { "2019-11-05T23:05:14.53878Z": { "challenge": "readrules", "increase": 1, "total": 1

我有一个类似-

[
  {
    "key": "033298fd-f792-4343-b145-852e9cdb680a",
    "value": {
      "total": 15452,
      "history": {
        "2019-11-05T23:05:14.53878Z": {
          "challenge": "readrules",
          "increase": 1,
          "total": 1
        },
        "2019-11-05T23:17:48.849886Z": {
          "challenge": "looksthesame",
          "increase": 100,
          "total": 1601
        }
     },
  ...
  ...
  ...
  }

 .... 2nd 'key' ....
}

其中,每个“键”后面都有一个“值”,该值具有
历史记录
。此“历史记录”同样有一个“键”,即
时间戳
,以及一个具有质询详细信息
质询
增加
总计
的值。 我想把它转换成一个熊猫数据帧,看起来像-

key                                              timestamp                   challenge       increase   total
033298fd-f792-4343-b145-852e9cdb680a    2019-11-05T23:05:14.53878Z      readrules          1         1 
033298fd-f792-4343-b145-852e9cdb680a    2019-11-05T23:17:48.84986Z      looksthesame      100       101
我试着与-

pd.io.json.json_normalize(json)

但这只是将整个json平铺成不同的列

假设您的数据名
数据
,请尝试:

pd.concat([
    pd.io.json.json_normalize([
        {
            "key": d["key"], 
            "timestamp": t, 
            "challenge": v['challenge'], 
            "increase": v['increase'], 
            "total": v['increase']
        } 
        for t,v in d['value']['history'].items() 
    ]) 
    for d in data
])

你想要的结果被大大截断了。请编辑它,以便人们了解您的目标是什么。或者更好地描述您想要的列名/结构。Pandas
json\u normalize
不会神奇地给出您需要的结构。您需要重新构造输入json,以便数组中的每个元素都代表一行,即在您的情况下
timestamp
我同意@FatihAkici。至少我们需要对data.Editted上的转换进行适当的描述。我希望它现在更具描述性!除了
json\u normalize()
,您还尝试过其他方法吗?它是嵌套列表。对于
data
t
中的每个项目
d
,每个
d
中的
v
仅提取数据框中所需的信息。@thushv89给出解释。