Pandas, zagnieżdzony JSON

Pandas, zagnieżdzony JSON
AR
  • Rejestracja:około 9 lat
  • Ostatnio:około 4 lata
  • Postów:92
0

Cześć

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

Struktura Json wygląda jak poniżej:

Kopiuj
{
    "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)

Kopiuj
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

KA
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:27
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.

AR
  • Rejestracja:około 9 lat
  • Ostatnio:około 4 lata
  • Postów:92
0

OK, dziękuję.

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

KA
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:27
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:

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.