Pandas pd.read_json()-Funktion

Python math 模块Pandas Häufige Funktionen


read_json()Es ist eine Funktion in der pandas-Bibliothek, die zum Lesen von JSON-Dateien (JavaScript Object Notation) verwendet wird und den Import von Daten in mehreren JSON-Formaten unterstützt.

JSON ist ein leichtgewichtiges Datenaustauschformat, das für Menschen leicht zu lesen und zu schreiben und für Maschinen leicht zu analysieren und zu generieren ist. Es wird in Szenarien wie Web-APIs und Konfigurationsdateien weit verbreitet eingesetzt.read_json()Es kann JSON-Daten in das pandas DataFrame-Format konvertieren und erleichtert so die Datenanalyse.


Grundlegende Syntax und Parameter

Syntaxformat

pandas.read_json(path_or_buf, orient=None, typ='frame', dtype=None,
                convert_axes=None, convert_dates=True, keep_default_dates=True,
                numpy=False, precise_float=False, date_unit='ms', ...)

Parameterbeschreibung

ParameterTypeBeschreibungStandardwert
path_or_bufstr, Pfadobjekt oder dateiähnliches ObjektJSON-Dateipfad, URL oder StringErforderlich
orientstrDas Format der JSON-Daten: 'split', 'records', 'index', 'columns', 'values'Keine
typstrRückgabetyp: 'frame' gibt DataFrame zurück, 'series' gibt Series zurück'frame'
dtypedictDatentypen der Spalten angebenKeine
convert_axesboolOb Achsen in datetime konvertiert werden sollenKeine
convert_datesbool, listOb Datumsspalten konvertiert werden sollenTrue
numpyboolOb numpy-Arrays verwendet werden sollenFalse

Rückgabewert

  • Rückgabetyp:pd.DataFrameoderpd.Series
  • Gibt standardmäßig DataFrame zurück, das in zweidimensionaler Tabellenform vorliegen kann.
  • Wanntyp='series'Gibt Series zurück, wenn typ='series'.

Beispiele

Anhand der folgenden Beispiele meistern Sie umfassendread_json()die verschiedenen Verwendungsweisen.

Beispiel 1: JSON-Daten in verschiedenen Formaten lesen

JSON-Daten haben mehrere Formate,read_json()[Es] unterstützt die gängigsten Formate.

Beispiel

import pandas as pd
import json

# Beispieldaten: JSON-Array-Format (Datensatzformat)
json_records = '''
[
    {"name": "Tom", "age": 28, "city": "Beijing", "salary": 8000},
    {"name": "Jerry", "age": 35, "city": "Shanghai", "salary": 12000},
    {"name": "Mike", "age": 42, "city": "Guangzhou", "salary": 15000}
]
'''


# JSON-String in eine Datei schreiben
with open('data_records.json', 'w', encoding='utf-8') as f:
    f.write(json_records)

# JSON-Datei lesen (Datensatzformat, am häufigsten verwendet)
# orient='records' bedeutet, dass jede Zeile ein JSON-Objekt ist
df_records = pd.read_json('data_records.json', orient='records')
print("Datensatzformat:")
print(df_records)
print()

# Beispieldaten: JSON-Objektformat (Indexformat)
json_index = '''
{
    "Tom": {"age": 28, "city": "Beijing", "salary": 8000},
    "Jerry": {"age": 35, "city": "Shanghai", "salary": 12000},
    "Mike": {"age": 42, "city": "Guangzhou", "salary": 15000}
}
'''


with open('data_index.json', 'w', encoding='utf-8') as f:
    f.write(json_index)

# JSON-Datei lesen (Indexformat, wobei ein Feld als Index verwendet wird)
df_index = pd.read_json('data_index.json', orient='index')
print("Indexformat:")
print(df_index)
print()

# Beispieldaten: JSON-Spaltenformat (Spaltenformat)
json_columns = '''
{
    "name": ["Tom", "Jerry", "Mike"],
    "age": [28, 35, 42],
    "city": ["Beijing", "Shanghai", "Guangzhou"],
    "salary": [8000, 12000, 15000]
}
'''


with open('data_columns.json', 'w', encoding='utf-8') as f:
    f.write(json_columns)

# JSON-Datei lesen (Spaltenformat)
df_columns = pd.read_json('data_columns.json', orient='columns')
print("Spaltenformat:")
print(df_columns)

Erwartete Ausgabe:

Records 格式:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   35   Shanghai   12000
2   Mike   42  Guangzhou   15000

Index 格式:
         age       city  salary
Tom       28    Beijing    8000
Jerry    35   Shanghai   12000
Mike     42  Guangzhou   15000

Columns 格式:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   参数          Shanghai   12000
2   Mike   42  Guangzhou   15000

Code-Erklärung:

  • orient='records': JSON-Array-Format, jede Zeile ist ein JSON-Objekt, das am häufigsten verwendete Format.
  • orient='index': JSON-Objekt-Format, Schlüssel dienen als Index.
  • orient='columns': JSON-Spalten-Format, Schlüssel sind Spaltennamen, Werte sind Arrays.
  • Die korrekte Angabe desorientParameters ist entscheidend für das korrekte Parsen von JSON-Daten.

Beispiel 2: JSON aus Strings und URLs lesen

read_json()Es kann nicht nur Dateien lesen, sondern unterstützt auch das Lesen von Daten aus Strings und URLs.

Beispiel

import pandas as pd
import json
from io import StringIO

# Beispiel 2a: Aus einem JSON-String lesen
json_string = '''
[
    {"product": "A", "sales": 100, "region": "North"},
    {"product": "B", "sales": 200, "region": "South"},
    {"product": "C", "sales": 150, "region": "East"}
]
'''


# StringIO verwenden, um die Zeichenkette in ein Dateiobjekt umzuwandeln
df_from_string = pd.read_json(StringIO(json_string))
print("Aus Zeichenkette gelesen:")
print(df_from_string)
print()

# Sie können die JSON-Zeichenkette auch direkt im Parameter übergeben
# Hinweis: Python-Zeichenketten müssen korrekt escaped werden
json_str_direct = '[{"product": "A", "sales": 100}, {"product": "B", "sales": 200}]'
df_direct = pd.read_json(json_str_direct)
print("Zeichenkette direkt übergeben:")
print(df_direct)
print()

# Beispiel 2b: JSON-Lines-Format lesen (ein JSON-Objekt pro Zeile)
# JSON Lines ist ein gängiges Logformat
json_lines = '''{"name": "Tom", "score": 85}
{"name": "Jerry", "score": 92}
{"name": "Mike", "score": 78}
{"name": "Lucy", "score": 95}'''


with open('data_lines.json', 'w', encoding='utf-8') as f:
    f.write(json_lines)

# Das JSON-Lines-Format erfordert zeilenweises Lesen
# Sie können den Parameter lines=True verwenden (wenn das JSONL-Format dies unterstützt)
# Oder manuell verarbeiten
df_list = []
with open('data_lines.json', 'r', encoding='utf-8') as f:
    for line in f:
        df_list.append(json.loads(line))

df_lines = pd.DataFrame(df_list)
print("Lesen im JSON-Lines-Format:")
print(df_lines)
print()

# Beispiel 2c: Aus einer API-URL lesen (erfordert Netzwerkzugriff)
# Hier wird eine Beispiel-API verwendet; ersetzen Sie sie in der tatsächlichen Nutzung durch eine echte URL
# df_api = pd.read_json('https://api.example.com/data')
# print(df_api)
print("Hinweis: Das Lesen von einer URL erfordert eine tatsächliche Netzwerkanfrage")

Erwartete Ausgabe:

从字符串读取:
  product  sales region
0       A    100   North
1       B    200   South
2       C    150    East

直接传入字符串:
  product  sales
0       A    100
1       B    200

JSON Lines 格式读取:
    name  score
0    Tom     85
1  Jerry     92
2    Mike     78
3    Lucy     95

注意:从 URL 读取需要实际的网络请求

Code-Erklärung:

  • read_json()Es kann eine JSON-Zeichenkette als Eingabe akzeptieren; verwenden SieStringIOum die Zeichenkette in ein dateiähnliches Objekt umzuwandeln.
  • Das JSON-Lines-Format enthält ein unabhängiges JSON-Objekt pro Zeile und wird häufig in der Log-Verarbeitung verwendet; es muss Zeile für Zeile gelesen und dann in einen DataFrame zusammengeführt werden.
  • Beim Lesen von einer URL übergeben Sie einfach die URL-Zeichenkette direkt, aber Netzwerkunterstützung ist erforderlich.

Beispiel 3: Umgang mit Datumsangaben und Typkonvertierung

Datumsangaben und numerische Typen in JSON-Daten erfordern eine besondere Behandlung.

Beispiel

import pandas as pd

# Beispiel 3a: Datumsfelder behandeln
json_with_date = '''
[
    {"name": "Tom", "birthday": "1995-03-15", "join_date": "2020-01-10"},
    {"name": "Jerry", "birthday": "1988-07-22", "join_date": "2019-03-05"},
    {"name": "Mike", "birthday": "1981-11-30", "join_date": "2018-06-20"}
]
'''


with open('data_with_date.json', 'w', encoding='utf-8') as f:
    f.write(json_with_date)

# Standardmäßig werden Datumszeichenfolgen als Objekttyp gelesen
df_date = pd.read_json('data_with_date.json')
print("Standardmäßiges Einlesen (Datumsangaben als Strings):")
print(df_date)
print("Typ von birthday:", df_date['birthday'].dtype)
print()

# Verwenden Sie convert_dates, um Datumsspalten automatisch zu konvertieren
df_date_converted = pd.read_json('data_with_date.json', convert_dates=['birthday', 'join_date'])
print("Nach Konvertierung der Datumsangaben:")
print(df_date_converted)
print("Geburtstagstyp:", df_date_converted['birthday'].dtype)
print()

# Beispiel 3b: Datentypen angeben
json_mixed = '''
[
    {"id": "1", "name": "Tom", "score": 85.5},
    {"id": "2", "name": "Jerry", "score": 92.0},
    {"id": "3", "name": "Mike", "score": 78.5}
]
'''


with open('data_mixed.json', 'w', encoding='utf-8') as f:
    f.write(json_mixed)

# Standardmäßig wird id als Integer gelesen, name als String und score als Float
df_mixed = pd.read_json('data_mixed.json')
print("Standardmäßige Typinferenz:")
print(df_mixed)
print("id-Typ:", df_mixed['id'].dtype)
print()

# dtype verwenden, um Typen explizit anzugeben
df_typed = pd.read_json('data_mixed.json', dtype={'id': str, 'score': float})
print("Nach Angabe der Typen:")
print(df_typed)
print("id-Typ:", df_typed['id'].dtype)

Erwartete Ausgabe:

默认读取(日期为字符串):
    name    birthday    join_date
0    Tom  1995-03-15  2020-01-10
1  Jerry  1988-07-22  2019-03-05
2    Mike  1981-11-30  2018-06-20

默认读取(日期为字符串):
    name    birthday    join_date
0    汤    Tom  1995-03-15  pandas 的 to_json() 和 read_json() 的完整配对示例
1  Jerry  1988-07-22  2019-03-05
2    Mike  1981-11-30  确保 JSON 数据格式一致
    1981-配对    to_json(orient='records')  配对    read_json(orient='records')
3   Mike  1981-11-30  to_json(orient='records')
...
    join_date    2018-06-20

birthday 类型: object

转换日期后:
birthday 类型: datetime64[ns]

Code-Erklärung:

  • convert_datesDer Parameter kann angeben, welche Spalten in Datumstypen umgewandelt werden müssen.
  • Standardmäßig,convert_dates=True[Es] erkennt gängige Datumsformate automatisch.
  • dtypeDer Parameter kann den Datentyp jeder Spalte explizit angeben und so Typinferenzfehler vermeiden.

Hinweise

  • Die korrekte Angabe desorientDer Parameter ist der Schlüssel zum Lesen von JSON-Daten; unterschiedliche JSON-Strukturen erfordern unterschiedliche orient-Werte.
  • Datumsangaben in JSON werden standardmäßig als Zeichenfolgen gelesen; Sie müssen denconvert_datesParameter verwenden, um sie in Datumstypen umzuwandeln.
  • Beim Lesen großer JSON-Dateien sollten Sie die Verwendung deschunksizeParameters zum stückweisen Lesen in Betracht ziehen.
  • read_json()[Es] unterstützt das Lesen aus Dateipfaden, URLs und JSON-Zeichenfolgen.
  • Das JSON-Lines-Format muss Zeile für Zeile geparst und dann in einen DataFrame zusammengeführt werden.

Zusammenfassung

read_json()Es ist die Kernfunktion in pandas zum Lesen von JSON-Daten und unterstützt mehrere JSON-Formate. Als gängiges Format für Web-APIs und den Datenaustausch wird JSON in der praktischen Datenanalyse häufig verwendet.

Meisternread_json()der Schlüssel liegt darin, die verschiedenenorientFormate sowie die Methoden zur Behandlung von Datum und Typ zu verstehen. Lesern wird empfohlen, in ihrer praktischen Arbeit das Lesen von JSON-Daten in verschiedenen Formaten zu üben.

Python math 模块Pandas Häufige Funktionen

Andere Erweiterungen