从多列数据帧标准化JSON对象

时间:2019-07-28 16:12:54

标签: python python-3.x

我正在尝试提取从请求中获得的JSON信息,但有一点麻烦。

由于我的数据是嵌套的JSON,因此我首先使用

df = json_normalize(response)

将信息放入df。但是结果是我得到了一个df,其中仍然有一列包含JSON样式信息的列,我无法再使用json_normalize进行提取。 df如下:

id    duration     columnA                            
1     12         [{"A": "600", "B": "30", "C": "50"},{"A": "200", "B": "35", "C": "50"}]  
2     5          [{"A": "300", "B": "70", "C": "80"},{"A": "400", "B": "76", "C": "90"}]                       

但是当我尝试

df2 = json_normalize(df['columnA'])

我只收到错误消息“ AttributeError:'列表'对象没有属性'值'”

因此,我想得到一个df,例如:

A   B   C
600 30  50
200 35  50
300 70  80
400 76  90

2 个答案:

答案 0 :(得分:0)

您可以尝试一下吗?

df = json_normalize(response, 'columnA', ['A','B','C'])

假设A,B和C是平坦的

答案 1 :(得分:0)

您可以将每个内部对象和concat归一化的数据帧归一化:

import pandas as pd
from pandas.io.json import json_normalize

df = pd.DataFrame(
    [
        [
            1,
            2,
            [{"A": "600", "B": "30", "C": "50"}, {"A": "200", "B": "35", "C": "50"}],
        ],
        [
            2,
            5,
            [{"A": "300", "B": "70", "C": "80"}, {"A": "400", "B": "76", "C": "90"}],
        ],
    ],
    columns='id duration columnA'.split(),
)

print(pd.concat(list(df.columnA.map(json_normalize))))

输出:

     A   B   C
0  600  30  50
1  200  35  50
0  300  70  80
1  400  76  90