Pandas, zagnieżdzony JSON

Odpowiedz Nowy wątek
2019-09-09 13:37
0

Cześć

jestem nowy w temacie Python, potrzebuję wyłuskać dane z jsona przy pomocy Pandas.

Struktura Json wygląda jak poniżej:

{
    "idDriver": "100001",
    "defaultTripType": "private",
    "fleetManagerRole": null,
    "identifications": [
        {
            "code": "90-00-00-77-20",
            "from": "2019-08-08T10:38:15Z",
            "rawId": "",
            "vehicle": {
                "isBusinessCar": "0",
                "id": "10000",
                "licensePlate": "ABCD",
                "class": "Suziki 1.6 CDTI",
                }
            }
        }
    ]
}

Jako efekt chciałbym w jednej linii otrzymac: 'idDriver' z poziomu 0 i ‘licensePlate’ z poziomu identifications/ vehicle:

Na jakim jestem etapie:

(dane ładuję poprzez API - tu wszystko działą super)

json_data = json.loads(myResponse.text)

#rozwijając jedynie 'identifications' – działa super
workdata = json_normalize(json_data, record_path= ['identifications'], 
                     meta=['idDriver'])

#rozwijając 'identifications''identifications'\'vehicle'  - i to już nie działa
workdata = json_normalize(json_data, record_path= ['identifications','vehicle'], 
                     meta=['idDriver'])

Będę wdzięczny za jakąś wskazówkę co robię nieprawidłowło.

Pozdrawiam,
Arek

Pozostało 580 znaków

2019-09-09 16:12
0

record_path musi wskazywać na listę rekordów u Ciebie vehicle jest obiektem. Najprościej byłoby po prostu dodać tę kolumnę ręcznie - workdata['licensePlate'] = workdata['vehicle'].apply(lambda x: x['licensePlate']), ale to zależy co tak dokładnie chcesz mieć w tabeli.

Pozostało 580 znaków

2019-09-11 11:34
0

OK, dziękuję.

Ale jak musi być znormalizowana workdata aby dało się tę kolumnę dodać?

Pozostało 580 znaków

2019-09-14 13:26
0

Upewnij się, że masz pandas w wersji >= 0.25.0. Wcześniej wypłaszczanie nie działało jak trzeba kiedy używałeś record_path. Wtedy dla:

workdata = json_normalize(json_data, record_path= ['identifications'], meta=['idDriver'])

powinieneś dostać:

code from rawId vehicle.isBusinessCar vehicle.id vehicle.licensePlate vehicle.class idDriver
90-00-00-77-20 2019-08-08T10:38:15Z 0 10000 ABCD Suziki 1.6 CDTI 100001
edytowany 1x, ostatnio: Kalrais, 2019-09-14 13:29

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0