Konvertering av JSON-er til Pandas DataFrames: Parsing Them The Right Way - KDnuggets

Konvertering av JSON-er til Pandas DataFrames: Parsing Them The Right Way – KDnuggets

Kilde node: 3093512

Konvertering av JSON-er til Pandas DataFrames: Parsing dem på riktig måte
Bilde av forfatter
 

Når du dykker inn i verden av datavitenskap og maskinlæring, er en av de grunnleggende ferdighetene du vil møte kunsten å lese data. Hvis du allerede har litt erfaring med det, er du sannsynligvis kjent med JSON (JavaScript Object Notation) – et populært format for både lagring og utveksling av data. 

Tenk på hvordan NoSQL-databaser som MongoDB elsker å lagre data i JSON, eller hvordan REST API-er ofte reagerer i samme format.

Selv om JSON er perfekt for lagring og utveksling, er imidlertid ikke helt klar for dybdeanalyse i sin rå form. Det er her vi forvandler det til noe mer analytisk vennlig – et tabellformat. 

Så, enten du har å gjøre med et enkelt JSON-objekt eller en herlig rekke av dem, i Pythons termer, håndterer du i hovedsak en dict eller en liste over dicts. 

La oss sammen utforske hvordan denne transformasjonen utfolder seg, noe som gjør dataene våre modne for analyse ????

I dag skal jeg forklare en magisk kommando som lar oss enkelt analysere enhver JSON til et tabellformat på sekunder. 

Og det er... pd.json_normalize()

Så la oss se hvordan det fungerer med forskjellige typer JSON-er. 

Den første typen JSON vi kan jobbe med er JSON-er på ett nivå med noen få nøkler og verdier. Vi definerer våre første enkle JSON-er som følger:

Kode etter forfatter

Så la oss simulere behovet for å jobbe med disse JSON. Vi vet alle at det ikke er mye å gjøre i deres JSON-format. Vi må transformere disse JSON-ene til et eller annet lesbart og modifiserbart format ... som betyr Pandas DataFrames!

1.1 Håndtere enkle JSON-strukturer

Først må vi importere pandas-biblioteket, og deretter kan vi bruke kommandoen pd.json_normalize(), som følger:

import pandas as pd
pd.json_normalize(json_string)

 

Ved å bruke denne kommandoen på en JSON med en enkelt post, får vi den mest grunnleggende tabellen. Men når dataene våre er litt mer komplekse og presenterer en liste over JSON-er, kan vi fortsatt bruke den samme kommandoen uten ytterligere komplikasjoner, og utdataene vil tilsvare en tabell med flere poster.

 

Konvertering av JSON-er til Pandas DataFrames: Parsing dem på riktig måte
Bilde av forfatter
 

Enkelt... ikke sant? 

Det neste naturlige spørsmålet er hva som skjer når noen av verdiene mangler. 

 1.2 Håndtere nullverdier

Tenk deg at noen av verdiene ikke er informert, som for eksempel at inntektsrekorden for David mangler. Når vi transformerer vår JSON til en enkel panda-dataramme, vil den tilsvarende verdien vises som NaN. 

 

Konvertering av JSON-er til Pandas DataFrames: Parsing dem på riktig måte
Bilde av forfatter 
 
Og hva om jeg bare ønsker å få noen av feltene?

 1.3 Velge kun de kolonnene av interesse

I tilfelle vi bare ønsker å transformere noen spesifikke felt til en tabellformet pandas DataFrame, lar ikke kommandoen json_normalize() oss velge hvilke felt som skal transformeres. 

Derfor bør en liten forhåndsbehandling av JSON utføres der vi filtrerer bare de kolonnene som er av interesse. 

# 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)

 

Så la oss gå til en mer avansert JSON-struktur. 

Når vi har å gjøre med JSON-er med flere nivåer, befinner vi oss med nestede JSON-er innenfor forskjellige nivåer. Prosedyren er den samme som før, men i dette tilfellet kan vi velge hvor mange nivåer vi vil transformere. Som standard vil kommandoen alltid utvide alle nivåer og generere nye kolonner som inneholder det sammenkoblede navnet på alle de nestede nivåene. 

Så hvis vi normaliserer følgende JSON-er.

Kode etter forfatter

Vi vil få følgende tabell med 3 kolonner under feltferdighetene: 

  • skills.python
  • ferdigheter.SQL
  • ferdigheter.GCP

og 4 kolonner under feltrollene 

  • roller.prosjektleder
  • roller.dataingeniør
  • roller.dataforsker
  • roller.dataanalytiker

 

Konvertering av JSON-er til Pandas DataFrames: Parsing dem på riktig måte
Bilde av forfatter 
 

Tenk deg imidlertid at vi bare ønsker å transformere toppnivået vårt. Vi kan gjøre det ved å spesifikt definere parameteren max_level til 0 (max_level vi ønsker å utvide). 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

De ventende verdiene vil bli opprettholdt innenfor JSON-er innenfor vår pandas DataFrame.

 

Konvertering av JSON-er til Pandas DataFrames: Parsing dem på riktig måte
Bilde av forfatter 

Det siste tilfellet vi kan finne er å ha en nestet liste i et JSON-felt. Så vi definerer først JSONene våre som skal brukes. 

Kode etter forfatter

Vi kan effektivt administrere disse dataene ved å bruke Pandas i Python. Funksjonen pd.json_normalize() er spesielt nyttig i denne sammenhengen. Den kan flate ut JSON-dataene, inkludert den nestede listen, til et strukturert format som er egnet for analyse. Når denne funksjonen brukes på JSON-dataene våre, produserer den en normalisert tabell som inkorporerer den nestede listen som en del av feltene.

Dessuten tilbyr Pandas muligheten til å avgrense denne prosessen ytterligere. Ved å bruke record_path-parameteren i pd.json_normalize(), kan vi styre funksjonen til å spesifikt normalisere den nestede listen. 

Denne handlingen resulterer i en dedikert tabell eksklusivt for listens innhold. Som standard vil denne prosessen bare utfolde elementene i listen. For å berike denne tabellen med ekstra kontekst, for eksempel å beholde en tilknyttet ID for hver post, kan vi imidlertid bruke metaparameteren.

 

Konvertering av JSON-er til Pandas DataFrames: Parsing dem på riktig måte
Bilde av forfatter

Oppsummert er transformasjonen av JSON-data til CSV-filer ved hjelp av Pythons Pandas-bibliotek enkel og effektiv.

JSON er fortsatt det vanligste formatet i moderne datalagring og -utveksling, spesielt i NoSQL-databaser og REST APIer. Det gir imidlertid noen viktige analytiske utfordringer når man håndterer data i sitt råformat. 

Den sentrale rollen til Pandas' pd.json_normalize() fremstår som en flott måte å håndtere slike formater på og konvertere dataene våre til pandas DataFrame. 

Jeg håper denne veiledningen var nyttig, og neste gang du arbeider med JSON, kan du gjøre det på en mer effektiv måte. 

Du kan gå og sjekke den tilsvarende Jupyter Notebook i følger GitHub repo.
 
 

Josep Ferrer er en analyseingeniør fra Barcelona. Han ble uteksaminert i fysikkingeniør og jobber for tiden i Data Science-feltet brukt på menneskelig mobilitet. Han er en deltidsinnholdsskaper med fokus på datavitenskap og teknologi. Du kan kontakte ham på Linkedin, Twitter or Medium.

Tidstempel:

Mer fra KDnuggets