展平熊猫数据框中的一列

时间:2021-01-08 06:00:05

标签: python pandas

我有一个像下面这样的json:

js = """[{"id": 13, "kits": [{"kit": "KIT1216A", "quantity_parts": 80, "quantity_kit": 1},
        {"kit": "KIT1216B", "quantity_parts":680, "quantity_kit": 11}],
        "transaction_date": "2020-11-27T05:02:03.822000Z", "dispatch_date": "2020-11-27T05:02:05.919000Z", "transaction_no"
: 2005, "transporter_name": "TCI", "vehicle_details": "hr55ab3337", "invoice_number": "355733019", "remarks": "0", "sending_location": 11, "owner": 4}]"""

其中 kits 是一个包含多个字典的列表。

如何展平我从中创建的数据框,以便套件的数据包含在行本身中?

我只是尝试过:

data = json.loads(js)
df = pd.DataFrame(data)

输出:

    id  kits    transaction_date    dispatch_date   transaction_no  transporter_name    vehicle_details invoice_number  remarks sending_location    owner
0   13  [{'kit': 'KIT1216A', 'quantity_parts': 80, 'qu...   2020-11-27T05:02:03.822000Z 2020-11-27T05:02:05.919000Z 2005    TCI hr55ab3337  355733019   0   11  4

期望的输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

使用json_normalize

data = json.loads(js)
cols = ['id','transaction_date','dispatch_date','transaction_no','transporter_name',
        'vehicle_details','invoice_number','remarks','sending_location','owner']
df = pd.json_normalize(data, 'kits', cols)
print (df)
        kit  quantity_parts  quantity_kit  id             transaction_date  \
0  KIT1216A              80             1  13  2020-11-27T05:02:03.822000Z   
1  KIT1216B             680            11  13  2020-11-27T05:02:03.822000Z   

                 dispatch_date transaction_no transporter_name  \
0  2020-11-27T05:02:05.919000Z           2005              TCI   
1  2020-11-27T05:02:05.919000Z           2005              TCI   

  vehicle_details invoice_number remarks sending_location owner  
0      hr55ab3337      355733019       0               11     4  
1      hr55ab3337      355733019       0               11     4