Konvertering af JSON'er til Pandas DataFrames: Parsing af dem på den rigtige måde - KDnuggets

Konvertering af JSON'er til Pandas DataFrames: Parsing af dem på den rigtige måde - KDnuggets

Kildeknude: 3093512

Konvertering af JSON'er til Pandas DataFrames: Parsing dem på den rigtige måde
Billede af forfatter
 

Når du dykker ned i en verden af ​​datavidenskab og maskinlæring, er en af ​​de grundlæggende færdigheder, du vil møde, kunsten at læse data. Hvis du allerede har lidt erfaring med det, er du sikkert bekendt med JSON (JavaScript Object Notation) – et populært format til både lagring og udveksling af data. 

Tænk på, hvordan NoSQL-databaser som MongoDB elsker at gemme data i JSON, eller hvordan REST API'er ofte reagerer i samme format.

Men selvom JSON er perfekt til opbevaring og udveksling, er den ikke helt klar til dybdegående analyse i sin rå form. Det er her, vi forvandler det til noget mere analytisk venligt – et tabelformat. 

Så uanset om du har at gøre med et enkelt JSON-objekt eller en dejlig række af dem, i Pythons termer, håndterer du i det væsentlige en diktat eller en liste over diktater. 

Lad os sammen undersøge, hvordan denne transformation udfolder sig, hvilket gør vores data modne til analyse ????

I dag vil jeg forklare en magisk kommando, der giver os mulighed for nemt at parse enhver JSON til et tabelformat på få sekunder. 

Og det er... pd.json_normalize()

Så lad os se, hvordan det virker med forskellige typer JSON'er. 

Den første type JSON, som vi kan arbejde med, er JSON'er på et niveau med nogle få nøgler og værdier. Vi definerer vores første simple JSON'er som følger:

Kode efter forfatter

Så lad os simulere behovet for at arbejde med disse JSON. Vi ved alle, at der ikke er meget at gøre i deres JSON-format. Vi er nødt til at transformere disse JSON'er til et eller andet læsbart og modificerbart format... hvilket betyder Pandas DataFrames!

1.1 Håndtering af simple JSON-strukturer

Først skal vi importere pandas-biblioteket, og derefter kan vi bruge kommandoen pd.json_normalize(), som følger:

import pandas as pd
pd.json_normalize(json_string)

 

Ved at anvende denne kommando på en JSON med en enkelt post får vi den mest grundlæggende tabel. Men når vores data er en lille smule mere komplekse og præsenterer en liste over JSON'er, kan vi stadig bruge den samme kommando uden yderligere komplikationer, og outputtet vil svare til en tabel med flere poster.

 

Konvertering af JSON'er til Pandas DataFrames: Parsing dem på den rigtige måde
Billede af forfatter
 

Nemt... ikke? 

Det næste naturlige spørgsmål er, hvad der sker, når nogle af værdierne mangler. 

 1.2 Håndtering af nulværdier

Forestil dig, at nogle af værdierne ikke er informeret, som f.eks. mangler indkomstposten for David. Når vi transformerer vores JSON til en simpel panda-dataramme, vises den tilsvarende værdi som NaN. 

 

Konvertering af JSON'er til Pandas DataFrames: Parsing dem på den rigtige måde
Billede af forfatter 
 
Og hvad hvis jeg kun vil have nogle af felterne?

 1.3 Vælg kun de kolonner af interesse

Hvis vi bare ønsker at transformere nogle specifikke felter til en tabelformet pandas DataFrame, tillader kommandoen json_normalize() os ikke at vælge, hvilke felter der skal transformeres. 

Derfor bør der udføres en lille forbehandling af JSON, hvor vi filtrerer netop de kolonner af 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å lad os gå til en mere avanceret JSON-struktur. 

Når vi har at gøre med JSON'er på flere niveauer, befinder vi os med indlejrede JSON'er inden for forskellige niveauer. Proceduren er den samme som før, men i dette tilfælde kan vi vælge, hvor mange niveauer vi vil transformere. Som standard vil kommandoen altid udvide alle niveauer og generere nye kolonner, der indeholder det sammenkædede navn på alle de indlejrede niveauer. 

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

Kode efter forfatter

Vi ville få følgende tabel med 3 kolonner under feltfærdighederne: 

  • skills.python
  • færdigheder.SQL
  • færdigheder.GCP

og 4 kolonner under feltrollerne 

  • roller.projektleder
  • roller.dataingeniør
  • roller.data scientist
  • roller.dataanalytiker

 

Konvertering af JSON'er til Pandas DataFrames: Parsing dem på den rigtige måde
Billede af forfatter 
 

Forestil dig dog, at vi bare ønsker at transformere vores topniveau. Det kan vi gøre ved specifikt at definere parameteren max_level til 0 (det max_level vi ønsker at udvide). 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

De ventende værdier vil blive vedligeholdt i JSON'er i vores pandas DataFrame.

 

Konvertering af JSON'er til Pandas DataFrames: Parsing dem på den rigtige måde
Billede af forfatter 

Det sidste tilfælde, vi kan finde, er at have en indlejret liste i et JSON-felt. Så vi definerer først vores JSON'er, der skal bruges. 

Kode efter forfatter

Vi kan effektivt administrere disse data ved hjælp af Pandas i Python. Funktionen pd.json_normalize() er særlig nyttig i denne sammenhæng. Det kan udjævne JSON-data, inklusive den indlejrede liste, til et struktureret format, der er egnet til analyse. Når denne funktion anvendes på vores JSON-data, producerer den en normaliseret tabel, der inkorporerer den indlejrede liste som en del af dens felter.

Desuden tilbyder Pandas muligheden for at forfine denne proces yderligere. Ved at bruge record_path-parameteren i pd.json_normalize(), kan vi dirigere funktionen til specifikt at normalisere den indlejrede liste. 

Denne handling resulterer i en dedikeret tabel udelukkende til listens indhold. Som standard vil denne proces kun udfolde elementerne på listen. Men for at berige denne tabel med yderligere kontekst, såsom at bevare et tilknyttet ID for hver post, kan vi bruge metaparameteren.

 

Konvertering af JSON'er til Pandas DataFrames: Parsing dem på den rigtige måde
Billede af forfatter

Sammenfattende er transformationen af ​​JSON-data til CSV-filer ved hjælp af Pythons Pandas-bibliotek nem og effektiv.

JSON er stadig det mest almindelige format i moderne datalagring og -udveksling, især i NoSQL-databaser og REST API'er. Det giver dog nogle vigtige analytiske udfordringer, når man håndterer data i dets råformat. 

Den centrale rolle for Pandas' pd.json_normalize() fremstår som en fantastisk måde at håndtere sådanne formater og konvertere vores data til pandas DataFrame. 

Jeg håber, at denne guide var nyttig, og næste gang du har at gøre med JSON, kan du gøre det på en mere effektiv måde. 

Du kan gå og tjekke den tilsvarende Jupyter Notebook i efter GitHub repo.
 
 

Josep Ferrer er en analyseingeniør fra Barcelona. Han er uddannet i fysikingeniør og arbejder i øjeblikket inden for datavidenskab, der anvendes på menneskelig mobilitet. Han er en deltidsindholdsskaber med fokus på datavidenskab og teknologi. Du kan kontakte ham på LinkedIn, Twitter or Medium.

Tidsstempel:

Mere fra KDnuggets