JSON-Daten mit Pandas importieren

Mit Pandas lassen sich Daten aus unterschiedlichsten Quellen importieren. Wie die in einer CSV-Datei enthaltenen Werte in ein DataFrame übernommen werden können, hatte ich bereits in anderen Tutorials gezeigt. In diesem Artikel geht es nun um das Lesen von JSON-Dateien.

Dafür muss Pandas auf dem System installiert sein:

$ pip install pandas  # Windows
$ pip3 install pandas # Linux, macOS

Der Import erfolgt mit der Zeile

import pandas as pd

Die JSON-Datei kann mit der Methode read_json() gelesen werden. Hierdurch werden die Daten auch in ein DataFrame übernommen. Als Argument wird der Pfad zur JSON-Datei übergeben:

path = "/Users/bodo/Documents/population.json"
df = pd.read_json(path)

Befindet sich die Datei im selben Verzeichnis, reicht es aus, nur den Dateinamen zu übergeben:

df = pd.read_json("population.json")

Mit der Zeile

print(df)

werden die Daten ausgegeben. In diesem Beispiel handelt es sich um eine JSON-Datei mit Staaten und der dazugehörigen Population. Der Aufbau der Datei sie wie folgt aus:

[
    {
        "country": "Afghanistan",
        "population": 37172386
    },
    {
        "country": "Albania",
        "population": 2866376
    },
    ...
]

Die führt zu folgender Ausgabe:

               country  population
0          Afghanistan    37172386
1              Albania     2866376
2              Algeria    42228429
3       American Samoa       55465
4              Andorra       77006

Die Methode info() liefert Informationen zu den Daten:

print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 244 entries, 0 to 243
Data columns (total 2 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   country     244 non-null    object
 1   population  244 non-null    int64 
dtypes: int64(1), object(1)

Das Sortieren übernimmt die Methode sort_values(), an die mehrere Argumente übergeben werden können. In diesem Beispiel könnte dies so aussehen:

df.sort_values(
            by="population",
            axis=0,
            ascending=True,
            inplace=True,
            kind='quicksort',
            na_position='last'
        )
  • by: Angabe der Spalte, die für die Sortierung verwendet werden soll.
  • axis:: Die Angabe von 0 bedeutet, dass es sich bei dem bei by angegebenen Wert (hier population) um eine Spaltenbezeichnung handelt. Die Angabe von 1 meint hingegen den Zeilenindex.
  • ascending: Es wird aufsteigend sortiert.
  • inplace: Bei True wird das vorhandene DataFrame und nicht ein kopiertes DataFrame sortiert.
  • kind: Hier wird der zu verwendende Sortieralgorithmus angegeben. Standardmäßig ist dies quicksort.
  • na_position: Es mag sein, dass teilweise keine Werte vorhanden sind. Über na_position wird festgelegt, ob diese am Anfang (first) oder am Ende (last) der sortierten spalte angezeigt werden sollen.

Als Fazit lässt sich festhalten, dass die Datenübernahme von JSON zu Pandas sehr einfach ist. Letztendlich erledigt die Zeile

df = pd.read_json()

die ganze Arbeit, so dass die Daten sofort zur weiteren Auswertung zur Verfügung stehen. Für weitere Informationen zu dieser Methode sei auf die offizielle Dokumentation verwiesen.