Pandas json_normalize с вложенным JSON - PullRequest
1 голос
/ 08 апреля 2020

Я перепробовал много альтернатив, и лучший результат был с этим утверждением:

json_normalize(a['solution'][0]['tour'])

Я могу видеть только один блок туров за раз. vehicle_id 0 информация, и они мне нужны все вместе. Спасибо.

JSON:

{
    "total_clusters": 6,
    "solution": [
        {
            "vehicles_id": "0",
            "vehicles_location": {
                "lat": "",
                "lng": ""
            },
            "tour": [
                {
                    "shipping_id": "4a4b0750-63a7-11ea-8955-43fcb2cd860a",
                    "type": "dropoff",
                    "location_id": "797",
                    "coordinates": {
                        "lat": "-34.545736",
                        "lng": "-58.488340"
                    },
                    "cluster": 0
                },
                {
                    "shipping_id": "75e5a2c0-6314-11ea-b657-ddd473c629a3",
                    "type": "dropoff",
                    "location_id": "114",
                    "coordinates": {
                        "lat": "-34.568707",
                        "lng": "-58.452963"
                    },
                    "cluster": 0                 
                }
            ]
        },
        {
            "vehicles_id": "1",
            "vehicles_location": {
                "lat": "",
                "lng": ""
            },
            "tour": [
                {
                    "shipping_id": "c83ac7c0-51c4-11ea-9aef-973de7785221",
                    "type": "pickup",
                    "location_id": "687",
                    "coordinates": {
                        "lat": "-34.592824",
                        "lng": "-58.375457"
                    },
                    "cluster": 1
                },
                {
                    "shipping_id": "b5a295c0-51c4-11ea-b36d-651ee769ca89",
                    "type": "pickup",
                    "location_id": "687",
                    "coordinates": {
                        "lat": "-34.592824",
                        "lng": "-58.375457"
                    },
                    "cluster": 1            
                }
            ]
        }
    ]
}

Желаемый выход enter image description here

1 Ответ

1 голос
/ 09 апреля 2020

Вам необходимо передать параметр record_path в json_normalize.

Из документов :

record_path : str или список str, по умолчанию None

Путь в каждом объекте к списку записей. Если не будет передано, данные будут считаться массивом записей.

import pandas as pd
import json

raw_json_data = """{contents_of_your_json_here}"""
json_data = json.loads(raw_json_data)

df = pd.json_normalize(json_data, ["solution", "tour"])

Результат: enter image description here

...