Pandas df.to_json()-Funktion
to_json()Es ist eine Methode von DataFrame, die verwendet wird, um Daten in das JSON-Format (JavaScript Object Notation) zu exportieren.
JSON ist ein Standardformat für den Datenaustausch in Webanwendungen und APIs,to_json()Es unterstützt die Ausgabe in mehreren JSON-Formaten, darunter Datensatzformat, Indexformat, Spaltenformat usw. Es kann ein pandas DataFrame in einen JSON-String umwandeln oder in eine Datei schreiben, was den Datenaustausch mit anderen Systemen erleichtert.
Grundlegende Syntax und Parameter
Syntaxformat
DataFrame.to_json(path_or_buf=None, orient=None, date_format=None,
double_precision=10, force_ascii=True, date_unit='ms',
default_handler=None, lines=False, index=False,
indent=None, ...)
Parameterbeschreibung
| Parameter | Type | Beschreibung | Standardwert |
|---|---|---|---|
| path_or_buf | str, Pfadobjekt, dateiähnliches Objekt | Dateipfad; gibt eine Zeichenkette zurück, wenn None | Keine |
| orient | str | JSON-Format: 'split', 'records', 'index', 'columns', 'values', 'table' | Keine |
| date_format | str | Datumsformat: 'epoch', 'iso' | Keine |
| double_precision | int | Gleitkommapräzision | 10 |
| force_ascii | bool | Ob die ASCII-Kodierung erzwungen werden soll | True |
| date_unit | str | Datumseinheit: 's', 'ms', 'us', 'ns' | 'ms' |
| lines | bool | JSON-Lines-Format, ein JSON-Objekt pro Zeile | False |
| index | bool | Ob der Index einbezogen werden soll | False |
Rückgabewert
- Rückgabetyp:
Noneoderstr - Wenn ein Dateipfad angegeben wird, schreibt es in die Datei und gibt None zurück.
- Wann
path_or_buf=NoneWenn nicht angegeben, wird eine Zeichenkette im JSON-Format zurückgegeben.
Beispiele
Anhand der folgenden Beispiele meistern Sie umfassendto_json()die verschiedenen Verwendungsweisen.
Beispiel 1: Grundlegende Verwendung – Export in JSON-Zeichenkette
Erstellen Sie zunächst ein DataFrame und verwenden Sie dannto_json()um es in das JSON-Format zu exportieren.
Beispiel
# Beispiel-DataFrame erstellen
data = {
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)
# Beispiel 1a: Der grundlegendste Export (kein Pfad angegeben, gibt eine Zeichenkette zurück)
# Standard orient='columns'
json_string = df.to_json()
print("Standard-JSON-Format (Spalten):")
print(json_string)
print()
# Beispiel 1b: Export in Datei
df.to_json('output_basic.json', orient='records', indent=2)
print("Exportiert nach output_basic.json")
# Einlesen und überprüfen
df_check = pd.read_json('output_basic.json', orient='records')
print("nLesen überprüfen:")
print(df_check)
Erwartete Ausgabe:
默认 JSON 格式 (columns):
{"name":{"0":"Tom","1":"Jerry","2":"Mike","3":"Lucy"},"age":{"0":28,"1":35,"2":42,"3":26},...}
默认 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},
{"name":"Lucy","age":26,"city":"Shenzhen","salary":7000}
]
Code-Erklärung:
to_json()Wenn kein Pfad angegeben wird, wird ein JSON-String zurückgegeben.- Standardmäßig
orient='columns', ein JSON-Objekt pro Spalte. indent=2Macht die Ausgabe leichter lesbar (formatiert).
Beispiel 2: Verschiedene JSON-Formate
JSON-Daten haben mehrere Formate,to_json()und unterstützt mehrere Ausgabeformate, um unterschiedliche Anforderungen zu erfüllen.
Beispiel
# DataFrame erstellen
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})
# Beispiel 2a: records-Format - Array-Format, ein Objekt pro Zeile
# Am häufigsten verwendet, geeignet für die meisten APIs
json_records = df.to_json(orient='records')
print("Records-Format (ein Objekt pro Zeile):")
print(json_records)
print()
# Beispiel 2b: Index-Format - verwendet den Index als Schlüssel
json_index = df.to_json(orient='index')
print("Index-Format (verwendet den Index als Schlüssel):")
print(json_index)
print()
# Beispiel 2c: Spaltenformat - verwendet Spaltennamen als Schlüssel (Standard)
json_columns = df.to_json(orient='columns')
print("Spaltenformat (verwendet Spaltennamen als Schlüssel):")
print(json_columns)
print()
# Beispiel 2d: Split-Format - Split-Struktur
json_split = df.to_json(orient='split')
print("Split-Format (Split-Struktur):")
print(json_split)
print()
# Beispiel 2e: Werteformat - enthält nur Wert-Arrays
json_values = df.to_json(orient='values')
print("Werteformat (nur Werte):")
print(json_values)
Erwartete Ausgabe:
Records 格式(每行一个对象):
[{"name":"Tom","age":28,"city":"Beijing"},
{"name":"Jerry","age":35,"city":"Shanghai"},
{"name":"Mike","age":42,"city":"Guangzhou"},
{"name":"Lucy","age":26,"city":"Shenzhen"}]
Index 格式(以索引为键):
{"0":{"name":"Tom","age":28,"city":"Beijing"},
"1":{"name":"Jerry","age":35,"city":"Shanghai"},
...}
Columns 格式(以列名为键):
{"name":{"0":"Tom","1":"Jerry"...},"age":{"0":28...}...}
Split 格式(分离结构):
{"index":[0,1,2,3],"columns":["name","age","city"],
"data":[["Tom",28,"Beijing"],["Jerry",35,"Shanghai"]...]}
Values 格式(只包含值):
[["Tom",28,"Beijing"],["Jerry",35,"Shanghai"],["Mike",42,"Guangzhou"],["Lucy",26,"Shenzhen"]]
Code-Erklärung:
orient='records': Array-Format, jede Zeile ist ein JSON-Objekt, am häufigsten verwendet.orient='index': Verwendet den DataFrame-Index als Top-Level-Schlüssel.orient='columns': Verwendet Spaltennamen als Schlüssel, das Standardformat.orient='split': Split-Struktur, einfach für Programme zu parsen.orient='values': Reines numerisches Array, ohne Spaltennamen oder Index.
Beispiel 3: Umgang mit Datumsangaben und chinesischer Kodierung
Beim Exportieren von JSON müssen Datumsangaben und chinesische Kodierung korrekt behandelt werden.
Beispiel
from datetime import datetime
# Beispiel 3a: Datumsfelder behandeln
df_date = pd.DataFrame({
'name': ['Tom', 'Jerry'],
'birthday': [datetime(1995, 3, 15), datetime(1988, 7, 22)],
'join_date': [datetime(2020, 1, 10), datetime(2019, 3, 5)]
})
# Standard-Datumsformat ist Zeitstempel (Millisekunden)
json_timestamp = df_date.to_json(date_format='epoch', orient='records')
print("Datumsformat - Zeitstempel:")
print(json_timestamp)
print()
# Datum im ISO-Format
json_iso = df_date.to_json(date_format='iso', orient='records')
print("Datumsformat - ISO:")
print(json_iso)
print()
# Beispiel 3b: Umgang mit Chinesisch
df_cn = pd.DataFrame({
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'age': [28, 35, 42],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
})
# force_ascii=False erlaubt Nicht-ASCII-Zeichen
json_cn = df_cn.to_json(orient='records', force_ascii=False)
print("Chinesischer Inhalt (force_ascii=False):")
print(json_cn)
# In Datei schreiben (Chinesisch standardmäßig unterstützt)
df_cn.to_json('output_cn.json', orient='records', force_ascii=False)
print("nExportiert nach output_cn.json")
# Einlesen und überprüfen
df_cn_check = pd.read_json('output_cn.json')
print("Lesevorgang überprüfen:")
print(df_cn_check)
Erwartete Ausgabe:
日期格式 - 时间戳:
[{"name":"Tom","birthday":796...
{"name":"Jerry","birthday":584...}
日期格式 - ISO:
[{"name":"tom","birthday":"1995-03-15T00:00:00.000Z",...}]
中文内容(force_ascii=False):
[{"姓名":"张三","年龄":28,"城市":"北京"},
{"姓名":"李四","年龄":35,"城市":"上海"},
{"姓名":"王五","年龄":42,"城市":"广州"}]
已导出到 output_cn.json
验证读取:
姓名 年龄 城市
0 张三 (read_json 的 格式 orient='records' 匹配 to_json 的 orient='records') 北京
1 配对 李四 35 上海
2 王五 42 广州
</对>
Code-Erklärung:
date_format='epoch'Konvertiert Datumsangaben in Zeitstempel (Millisekunden).date_format='iso'Konvertiert Datumsangaben in das ISO-8601-Format.force_ascii=FalseErmöglicht, dass chinesische Zeichen in JSON erhalten bleiben, anstatt in Unicode-Escape-Sequenzen umgewandelt zu werden.
Beispiel 4: JSON-Lines-Format
JSON Lines ist ein Format mit einem JSON-Objekt pro Zeile, das häufig für Protokollierung und Big-Data-Verarbeitung verwendet wird.
Beispiel
# DataFrame erstellen
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})
# Beispiel 4a: JSON-Lines-Format (ein JSON-Objekt pro Zeile)
# lines=True aktiviert das JSON-Lines-Format
json_lines = df.to_json(orient='records', lines=True)
print("JSON-Lines-Format:")
print(json_lines)
print()
# In Datei schreiben
df.to_json('output_lines.json', orient='records', lines=True)
print("Exportiert nach output_lines.json")
# Beispiel 4b: JSON-Lines-Format lesen
# Zeile für Zeile einlesen
import json
df_lines_list = []
with open('output_lines.json', 'r', encoding='utf-8') as f:
for line in f:
df_lines_list.append(json.loads(line.strip()))
df_from_lines = pd.DataFrame(df_lines_list)
print("nRead JSON Lines:")
print(df_from_lines)
Erwartete Ausgabe:
JSON Lines 格式:
{"name":"Tom","age":28,"city":"Beijing"}
{"name":"Jerry","age":35,"city":"Shanghai"}
{"name":"Mike","age":42,"city":"city":"Guangzhou"}
{"name":"Lucy","age":26,"city":"Shenzhen"}
已导出到 output_lines.json
读取 JSON Lines:
name age city
0 Tom 28 Beijing
对 读 Jerry 35 Shanghai
2 Mike 42 格式 Guangzhou
3 Lucy 26 Shenzhen
Code-Erklärung:
lines=TrueErmöglicht das JSON-Lines-Format, ein JSON-Objekt pro Zeile.- JSON Lines eignet sich für Streaming-Verarbeitung und Big-Data-Szenarien.
- Beim Lesen muss es Zeile für Zeile geparst und in einen DataFrame umgewandelt werden.
Hinweise
- Standardmäßig
orient='columns', es wird allgemein empfohlen, zu verwendenorient='records'universeller. - Verwenden Sie
force_ascii=Falsechinesische Schriftzeichen beibehalten kann. - Das JSON Lines-Format muss mit
orient='records'zur Verwendung. read_json()Beim Lesen müssen Sie dasselbeorientParameter überschrieben werden.- Es wird empfohlen, das Datumsformat
date_format='iso', was besser lesbar ist.
Zusammenfassung
to_json()Es ist die Kernmethode für DataFrame, um in das JSON-Format zu exportieren. Sie unterstützt mehrere JSON-Formate und kann die Anforderungen verschiedener Szenarien wie Web API und Datenaustausch erfüllen.
In der Praxis ist JSON das am häufigsten verwendete Datenformat in Webanwendungen,to_json()kombiniert mitread_json()kann Datenimport und -export realisieren.orientdie verschiedenen Formate der Parameter und die Paarung mitread_json()zur Verwendung.
Pandas Häufige Funktionen