Pretvorba JSON-ov v Pandas DataFrames: razčlenite jih na pravi način - KDnuggets

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način – KDnuggets

Izvorno vozlišče: 3093512

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način
Slika avtorja
 

Ko se potopite v svet podatkovne znanosti in strojnega učenja, je ena temeljnih veščin, s katerimi se boste srečali, umetnost branja podatkov. Če imate s tem že nekaj izkušenj, verjetno poznate JSON (JavaScript Object Notation) – priljubljeno obliko za shranjevanje in izmenjavo podatkov. 

Pomislite na to, kako zbirke podatkov NoSQL, kot je MongoDB, rade shranjujejo podatke v JSON ali kako se API-ji REST pogosto odzivajo v isti obliki.

Kljub temu, da je JSON popoln za shranjevanje in izmenjavo, ni povsem pripravljen za poglobljeno analizo v svoji surovi obliki. Tu ga spremenimo v nekaj bolj analitično prijaznega – tabelarično obliko. 

Torej, ne glede na to, ali imate opravka z enim samim objektom JSON ali čudovitim nizom le-teh, v smislu Pythona, v bistvu upravljate dikt ali seznam dikt. 

Raziščimo skupaj, kako se ta transformacija odvija, zaradi česar so naši podatki zreli za analizo ????

Danes bom razložil čarobni ukaz, ki nam omogoča enostavno razčlenitev katerega koli JSON v obliki tabele v nekaj sekundah. 

In je… pd.json_normalize()

Pa poglejmo, kako deluje z različnimi vrstami JSON. 

Prva vrsta JSON, s katero lahko delamo, so enonivojski JSON z nekaj ključi in vrednostmi. Naše prve preproste datoteke JSON definiramo takole:

Koda avtorja

Torej simulirajmo potrebo po delu s temi JSON. Vsi vemo, da v njihovem formatu JSON ni veliko za početi. Te datoteke JSON moramo pretvoriti v berljivo in spremenljivo obliko ... kar pomeni Pandas DataFrames!

1.1 Ukvarjanje s preprostimi strukturami JSON

Najprej moramo uvoziti knjižnico pandas in nato lahko uporabimo ukaz pd.json_normalize(), kot sledi:

import pandas as pd
pd.json_normalize(json_string)

 

Z uporabo tega ukaza za JSON z enim samim zapisom dobimo najbolj osnovno tabelo. Če pa so naši podatki nekoliko bolj zapleteni in predstavljajo seznam JSON, lahko še vedno uporabimo isti ukaz brez nadaljnjih zapletov in izhod bo ustrezal tabeli z več zapisi.

 

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način
Slika avtorja
 

Enostavno ... kajne? 

Naslednje naravno vprašanje je, kaj se zgodi, ko nekatere vrednosti manjkajo. 

 1.2 Ravnanje z ničelnimi vrednostmi

Predstavljajte si, da nekatere vrednosti niso obveščene, na primer manjka evidenca o dohodku za Davida. Pri preoblikovanju našega JSON v preprost podatkovni okvir pandas bo ustrezna vrednost prikazana kot NaN. 

 

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način
Slika avtorja 
 
Kaj pa, če želim pridobiti samo nekatera polja?

 1.3 Izbira samo tistih stolpcev, ki vas zanimajo

V primeru, da želimo samo preoblikovati nekatera specifična polja v tabelarni pandas DataFrame, nam ukaz json_normalize() ne dovoljuje izbire polj za preoblikovanje. 

Zato je treba izvesti majhno predhodno obdelavo JSON, kjer filtriramo samo tiste stolpce, ki nas zanimajo. 

# Fields to include
fields = ['name', 'city']

# Filter the JSON data
filtered_json_list = [{key: value for key, value in item.items() if key in fields} for item in simple_json_list]

pd.json_normalize(filtered_json_list)

 

Torej, pojdimo na naprednejšo strukturo JSON. 

Ko imamo opravka z večnivojskimi JSON-i, se znajdemo z ugnezdenimi JSON-ji na različnih ravneh. Postopek je enak kot prej, le da lahko v tem primeru izberemo, koliko nivojev želimo transformirati. Privzeto bo ukaz vedno razširil vse ravni in ustvaril nove stolpce, ki vsebujejo povezana imena vseh ugnezdenih ravni. 

Če torej normaliziramo naslednje datoteke JSON.

Koda avtorja

Pod terenskimi veščinami bi dobili naslednjo tabelo s 3 stolpci: 

  • spretnosti.python
  • spretnosti.SQL
  • spretnosti.GCP

in 4 stolpce pod vlogami polja 

  • vloge.vodja projekta
  • vloge.podatkovni inženir
  • vloge.podatkovni znanstvenik
  • vloge.analitik podatkov

 

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način
Slika avtorja 
 

Predstavljajte si, da samo želimo spremeniti svojo najvišjo raven. To lahko storimo tako, da parameter max_level posebej definiramo na 0 (max_level, ki ga želimo razširiti). 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

Čakajoče vrednosti bodo ohranjene v JSON-ih v našem pandas DataFrame.

 

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način
Slika avtorja 

Zadnji primer, ki ga lahko najdemo, je ugnezdeni seznam znotraj polja JSON. Zato najprej definiramo naše JSON-e za uporabo. 

Koda avtorja

S temi podatki lahko učinkovito upravljamo s Pandas v Pythonu. Funkcija pd.json_normalize() je v tem kontekstu še posebej uporabna. Lahko izravna podatke JSON, vključno z ugnezdenim seznamom, v strukturirano obliko, primerno za analizo. Ko se ta funkcija uporabi za naše podatke JSON, ustvari normalizirano tabelo, ki vključuje ugnezdeni seznam kot del svojih polj.

Poleg tega Pandas ponuja možnost nadaljnjega izboljšanja tega procesa. Z uporabo parametra record_path v pd.json_normalize() lahko usmerimo funkcijo, da specifično normalizira ugnezdeni seznam. 

Rezultat tega dejanja je namenska tabela izključno za vsebino seznama. Privzeto bo ta postopek razgrnil le elemente na seznamu. Vendar pa lahko za obogatitev te tabele z dodatnim kontekstom, kot je ohranitev povezanega ID-ja za vsak zapis, uporabimo metaparameter.

 

Pretvarjanje JSON-ov v Pandas DataFrames: razčlenite jih na pravi način
Slika avtorja

Če povzamemo, je pretvorba podatkov JSON v datoteke CSV z uporabo Pythonove knjižnice Pandas enostavna in učinkovita.

JSON je še vedno najpogostejši format v sodobnem shranjevanju in izmenjavi podatkov, zlasti v bazah podatkov NoSQL in API-jih REST. Vendar predstavlja nekaj pomembnih analitičnih izzivov pri obravnavi podatkov v neobdelani obliki. 

Osrednja vloga Pandas pd.json_normalize() se kaže kot odličen način za obdelavo takšnih formatov in pretvorbo naših podatkov v pandas DataFrame. 

Upam, da je bil ta vodnik koristen in ko boste naslednjič imeli opravka z JSON, lahko to storite na bolj učinkovit način. 

Preverite lahko ustrezen Jupyter Notebook v po repo GitHub.
 
 

Josep Ferrer je inženir analitike iz Barcelone. Diplomiral je iz fizike in trenutno dela na področju Data Science, ki se uporablja za mobilnost ljudi. Je ustvarjalec vsebin s krajšim delovnim časom, osredotočen na podatkovno znanost in tehnologijo. Lahko ga kontaktirate na LinkedIn, Twitter or srednje.

Časovni žig:

Več od KDnuggets