Pandas pd.read_json()-Funktion
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
| Parameter | Type | Beschreibung | Standardwert |
|---|---|---|---|
| path_or_buf | str, Pfadobjekt oder dateiähnliches Objekt | JSON-Dateipfad, URL oder String | Erforderlich |
| orient | str | Das Format der JSON-Daten: 'split', 'records', 'index', 'columns', 'values' | Keine |
| typ | str | Rückgabetyp: 'frame' gibt DataFrame zurück, 'series' gibt Series zurück | 'frame' |
| dtype | dict | Datentypen der Spalten angeben | Keine |
| convert_axes | bool | Ob Achsen in datetime konvertiert werden sollen | Keine |
| convert_dates | bool, list | Ob Datumsspalten konvertiert werden sollen | True |
| numpy | bool | Ob numpy-Arrays verwendet werden sollen | False |
Rückgabewert
- Rückgabetyp:
pd.DataFrameoderpd.Series - Gibt standardmäßig DataFrame zurück, das in zweidimensionaler Tabellenform vorliegen kann.
- Wann
typ='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 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 des
orientParameters 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 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
# 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 des
orientDer 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 den
convert_datesParameter verwenden, um sie in Datumstypen umzuwandeln. - Beim Lesen großer JSON-Dateien sollten Sie die Verwendung des
chunksizeParameters 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.
Pandas Häufige Funktionen