Bild vom Autor | DALLE-3 & Canva
Wenn Sie schon einmal die Gelegenheit hatten, mit Daten zu arbeiten, sind Sie wahrscheinlich schon auf die Notwendigkeit gestoßen, JSON-Dateien (kurz für JavaScript Object Notation) zur weiteren Analyse in einen Pandas DataFrame zu laden. JSON-Dateien speichern Daten in einem Format, das für Menschen klar lesbar und für Laptop einfach zu verstehen ist. Allerdings kann die Navigation in JSON-Dateien manchmal kompliziert sein. Daher laden wir sie in ein strukturierteres Format wie DataFrames – das wie eine Tabelle mit Zeilen und Spalten aufgebaut ist.
Ich zeige Ihnen zwei verschiedene Möglichkeiten, JSON-Daten in einen Pandas DataFrame zu konvertieren. Bevor wir diese Methoden besprechen, betrachten wir diese Dummy-verschachtelte JSON-Datei, die ich in diesem Artikel als Beispiel verwenden werde.
{
"books": (
{
"title": "One Hundred Years of Solitude",
"writer": "Gabriel Garcia Marquez",
"evaluations": (
{
"reviewer": {
"title": "Kanwal Mehreen",
"location": "Islamabad, Pakistan"
},
"score": 4.5,
"feedback": "Magical and fully breathtaking!"
},
{
"reviewer": {
"title": "Isabella Martinez",
"location": "Bogotá, Colombia"
},
"score": 4.7,
"feedback": "A wonderful journey by a world of magic."
}
)
},
{
"title": "Issues Fall Aside",
"writer": "Chinua Achebe",
"evaluations": (
{
"reviewer": {
"title": "Zara Khan",
"location": "Lagos, Nigeria"
},
"score": 4.9,
"feedback": "Issues Fall Aside is one of the best of up to date African literature."
})})}
Die oben genannten JSON-Daten stellen eine Liste von Büchern dar, wobei jedes Buch einen Titel, einen Autor und eine Liste mit Rezensionen hat. Jede Rezension hat wiederum einen Rezensenten (mit Title und Ort) sowie eine Bewertung und Kommentare.
Methode 1: Mit dem json.load()
Und pd.DataFrame()
Funktionen
Der einfachste und direkteste Ansatz ist die Verwendung des integrierten json.load()
Funktion zum Parsen unserer JSON-Daten. Dadurch werden sie in ein Python-Wörterbuch konvertiert, und wir können dann den DataFrame direkt aus der resultierenden Python-Datenstruktur erstellen. Es gibt jedoch ein Drawback: Es kann nur einzelne verschachtelte Daten verarbeiten. Wenn Sie additionally im obigen Fall nur diese Schritte mit diesem Code ausführen:
import json
import pandas as pd
#Load the JSON knowledge
with open('books.json','r') as f:
knowledge = json.load(f)
#Create a DataFrame from the JSON knowledge
df = pd.DataFrame(knowledge('books'))
df
Ihre Ausgabe könnte folgendermaßen aussehen:
Ausgabe:
In der Spalte „Bewertungen“ können Sie das gesamte Wörterbuch sehen. Wenn die Ausgabe additionally korrekt angezeigt werden soll, müssen Sie die verschachtelte Struktur manuell bearbeiten. Dies können Sie folgendermaßen tun:
#Create a DataFrame from the nested JSON knowledge
df = pd.DataFrame((
{
'title': ebook('title'),
'writer': ebook('writer'),
'reviewer_name': assessment('reviewer')('title'),
'reviewer_location': assessment('reviewer')('location'),
'score': assessment('score'),
'feedback': assessment('feedback')
}
for ebook in knowledge('books')
for assessment in ebook('evaluations')
))
Aktualisierte Ausgabe:
Hier verwenden wir die Listenableitung, um eine flache Liste von Wörterbüchern zu erstellen, wobei jedes Wörterbuch die Buchinformationen und die entsprechende Rezension enthält. Anschließend erstellen wir damit den Pandas DataFrae.
Das Drawback bei diesem Ansatz besteht jedoch darin, dass mehr manueller Aufwand erforderlich ist, um die verschachtelte Struktur der JSON-Daten zu verwalten. Was additionally jetzt? Haben wir eine andere Möglichkeit?
Absolut! Ich meine, komm schon. Angesichts der Tatsache, dass wir im 21. Jahrhundert leben, erscheint es unrealistisch, ein solches Drawback ohne Lösung zu bewältigen. Sehen wir uns den anderen Ansatz an.
Methode 2 (empfohlen): Mit dem json_normalize()
Funktion
Der json_normalize()
Die Funktion aus der Pandas-Bibliothek ist eine bessere Möglichkeit, verschachtelte JSON-Daten zu verwalten. Sie vereinfacht automatisch die verschachtelte Struktur der JSON-Daten und erstellt aus den resultierenden Daten einen DataFrame. Sehen wir uns den Code an:
import pandas as pd
import json
#Load the JSON knowledge
with open('books.json', 'r') as f:
knowledge = json.load(f)
#Create the DataFrame utilizing json_normalize()
df = pd.json_normalize(
knowledge=knowledge('books'),
meta=('title', 'writer'),
record_path="evaluations",
errors="increase"
)
df
Ausgabe:
Der json_normalize()
Die Funktion verwendet die folgenden Parameter:
- Daten: Die Eingabedaten, die eine Liste von Wörterbüchern oder ein einzelnes Wörterbuch sein können. In diesem Fall ist es das aus der JSON-Datei geladene Datenwörterbuch.
- Datensatzpfad: Der Pfad in den JSON-Daten zu den Datensätzen, die Sie normalisieren möchten. In diesem Fall ist es der Schlüssel „evaluations“.
- Meta: Zusätzliche Felder, die in die normalisierte Ausgabe des JSON-Dokuments aufgenommen werden sollen. In diesem Fall verwenden wir die Felder „Titel“ und „Autor“. Beachten Sie, dass Spalten in Metadaten normalerweise am Ende erscheinen. So funktioniert diese Funktion. Für die Analyse spielt das keine Rolle, aber aus irgendeinem magischen Grund möchten Sie, dass diese Spalten vorher erscheinen. Tut mir leid, aber Sie müssen das manuell tun.
- Fehler: Die Fehlerbehandlungsstrategie, die „Ignorieren“, „Erhöhen“ oder „Warnen“ sein kann. Wir haben sie auf „Erhöhen“ eingestellt, sodass bei Fehlern während des Normalisierungsprozesses eine Ausnahme ausgelöst wird.
Einpacken
Beide Methoden haben ihre eigenen Vorteile und Anwendungsfälle, und die Wahl der Methode hängt von der Struktur und Komplexität der JSON-Daten ab. Wenn die JSON-Daten eine sehr verschachtelte Struktur haben, json_normalize()
Funktion ist möglicherweise die am besten geeignete Possibility, da sie die verschachtelten Daten automatisch verarbeiten kann. Wenn die JSON-Daten relativ einfach und flach sind, ist die pd.read_json()
Funktion ist möglicherweise der einfachste und direkteste Ansatz.
Beim Umgang mit großen JSON-Dateien ist es wichtig, an Speichernutzung und Leistung zu denken, da das Laden der gesamten Datei in den Speicher möglicherweise nicht funktioniert. Daher müssen Sie möglicherweise andere Optionen in Betracht ziehen, wie z. B. das Streamen der Daten, Lazy Loading oder die Verwendung eines speichereffizienteren Codecs wie Parquet.
Kanwal Mehreen Kanwal ist Ingenieurin für maschinelles Lernen und technische Autorin mit einer tiefen Leidenschaft für Datenwissenschaft und die Schnittstelle zwischen KI und Medizin. Sie ist Mitautorin des E-Books „Maximizing Productiveness with ChatGPT“. Als Google Technology Scholar 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie ist außerdem als Teradata Range in Tech Scholar, Mitacs Globalink Analysis Scholar und Harvard WeCode Scholar anerkannt. Kanwal ist eine leidenschaftliche Verfechterin des Wandels und hat FEMCodes gegründet, um Frauen in MINT-Fächern zu stärken.