Функция Pandas df.to_json()
to_json()Это метод DataFrame, используемый для экспорта данных в формат JSON (JavaScript Object Notation).
JSON — это стандартный формат для обмена данными в веб-приложениях и API,to_json()Он поддерживает вывод в нескольких форматах JSON, включая формат записей, формат индекса, формат столбцов и т. д. Он может преобразовывать pandas DataFrame в строку JSON или записывать его в файл, что упрощает обмен данными с другими системами.
Базовый синтаксис и параметры
Формат синтаксиса
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, ...)
Описание параметра
| Параметр | Type | Описание | Значение по умолчанию |
|---|---|---|---|
| path_or_buf | str, объект пути, файлоподобный объект | Путь к файлу; возвращает строку, если None | Отсутствует |
| orient | str | Формат JSON: 'split', 'records', 'index', 'columns', 'values', 'table' | Отсутствует |
| date_format | str | Формат даты: 'epoch', 'iso' | Отсутствует |
| double_precision | int | Точность чисел с плавающей запятой | 10 |
| force_ascii | bool | Принудительно ли использовать ASCII-кодирование | True |
| date_unit | str | Единица даты: 's', 'ms', 'us', 'ns' | 'ms' |
| lines | bool | Формат JSON Lines, один JSON-объект на строку | False |
| index | bool | Включать ли индекс | False |
Возвращаемое значение
- Тип возвращаемого значения:
Noneилиstr - Если указан путь к файлу, записывает в файл и возвращает None.
- Когда
path_or_buf=NoneЕсли не указано, возвращает строку в формате JSON.
Примеры
С помощью следующих примеров всесторонне освойтеto_json()различные варианты использования.
Пример 1: Базовое использование — экспорт в строку JSON
Сначала создайте DataFrame, затем используйтеto_json()чтобы экспортировать его в формат JSON.
Пример
# Создать пример DataFrame
data = {
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Пекин', 'Шанхай', 'Гуанчжоу', 'Shenzhen'],
'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)
# Пример 1a: Самый простой экспорт (путь не указан, возвращает строку)
# По умолчанию orient='columns'
json_string = df.to_json()
print("Формат JSON по умолчанию (столбцы):")
print(json_string)
print()
# Пример 1b: Экспорт в файл
df.to_json('output_basic.json', orient='records', indent=2)
print("Экспортировано в output_basic.json")
# Прочитать и проверить
df_check = pd.read_json('output_basic.json', orient='records')
print("nПроверка чтения:")
print(df_check)
Ожидаемый вывод:
默认 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}
]
Пояснение к коду:
to_json()Если путь не указан, возвращается строка JSON.- По умолчанию
orient='columns', один объект JSON на столбец. indent=2Делает вывод более удобным для чтения (форматированным).
Пример 2: Разные форматы JSON
Данные JSON имеют несколько форматов,to_json()и поддерживает несколько форматов вывода для разных потребностей.
Пример
# Создать DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Пекин', 'Шанхай', 'Гуанчжоу', 'Shenzhen']
})
# Пример 2a: формат records — формат массива, один объект на строку
# Наиболее часто используемый, подходит для большинства API
json_records = df.to_json(orient='records')
print("Формат records (один объект на строку):")
print(json_records)
print()
# Пример 2b: формат index — использует индекс в качестве ключа
json_index = df.to_json(orient='index')
print("Формат index (использует индекс как ключ):")
print(json_index)
print()
# Пример 2c: формат columns — использует имена столбцов как ключи (по умолчанию)
json_columns = df.to_json(orient='columns')
print("Формат columns (использует имена столбцов как ключи):")
print(json_columns)
print()
# Пример 2d: формат split — структура split
json_split = df.to_json(orient='split')
print("Формат split (структура split):")
print(json_split)
print()
# Пример 2e: формат values — содержит только массивы значений
json_values = df.to_json(orient='values')
print("Формат values (только значения):")
print(json_values)
Ожидаемый вывод:
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"]]
Пояснение к коду:
orient='records': Формат массива, каждая строка — объект JSON, используется чаще всего.orient='index': Использует индекс DataFrame в качестве ключа верхнего уровня.orient='columns': Использует имена столбцов в качестве ключей, формат по умолчанию.orient='split': Split-структура, удобная для разбора программами.orient='values': Чистый числовой массив, без имён столбцов и индекса.
Пример 3: Обработка дат и китайской кодировки
При экспорте JSON даты и китайская кодировка должны обрабатываться правильно.
Пример
from datetime import datetime
# Пример 3a: Обработка полей даты
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)]
})
# Формат даты по умолчанию — timestamp (миллисекунды)
json_timestamp = df_date.to_json(date_format='epoch', orient='records')
print("Формат даты - timestamp:")
print(json_timestamp)
print()
# Формат даты ISO
json_iso = df_date.to_json(date_format='iso', orient='records')
print("Формат даты - ISO:")
print(json_iso)
print()
# Пример 3b: Обработка китайского языка
df_cn = pd.DataFrame({
'Имя': ['Чжан Сань', 'Ли Сы', 'Ван У'],
'age': [28, 35, 42],
'city': ['Пекин', 'Шанхай', 'Гуанчжоу']
})
# force_ascii=False позволяет использовать символы, отличные от ASCII
json_cn = df_cn.to_json(orient='records', force_ascii=False)
print("Содержимое на китайском (force_ascii=False):")
print(json_cn)
# Запись в файл (китайские символы поддерживаются по умолчанию)
df_cn.to_json('output_cn.json', orient='records', force_ascii=False)
print("nЭкспортировано в output_cn.json")
# Прочитать и проверить
df_cn_check = pd.read_json('output_cn.json')
print("Проверка чтения:")
print(df_cn_check)
Ожидаемый вывод:
日期格式 - 时间戳:
[{"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 广州
</对>
Пояснение к коду:
date_format='epoch'Преобразует даты в метку времени (миллисекунды).date_format='iso'Преобразует даты в формат ISO 8601.force_ascii=FalseПозволяет сохранять китайские символы в JSON вместо экранирования в Unicode.
Пример 4: формат JSON Lines
JSON Lines — это формат, в котором один объект JSON на строку, обычно используется для логирования и обработки больших данных.
Пример
# Создать DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Пекин', 'Шанхай', 'Гуанчжоу', 'Shenzhen']
})
# Пример 4a: Формат JSON Lines (один объект JSON на строку)
# lines=True включает формат JSON Lines
json_lines = df.to_json(orient='records', lines=True)
print("Формат JSON Lines:")
print(json_lines)
print()
# Запись в файл
df.to_json('output_lines.json', orient='records', lines=True)
print("Экспортировано в output_lines.json")
# Пример 4b: Чтение формата JSON Lines
# Нужно читать построчно
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)
Ожидаемый вывод:
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
Пояснение к коду:
lines=TrueВключает формат JSON Lines, один объект JSON на строку.- JSON Lines подходит для потоковой обработки и сценариев больших данных.
- При чтении его нужно разбирать построчно и преобразовывать в DataFrame.
Примечания
- По умолчанию
orient='columns', обычно рекомендуется использоватьorient='records'более универсальный. - Используйте
force_ascii=Falseможет сохранять китайские иероглифы. - формат JSON Lines нужно использовать вместе с
orient='records'для использования. read_json()При чтении нужно использовать тот жеorientпараметра.- Рекомендуется использовать формат даты
date_format='iso', который более удобочитаем.
Итог
to_json()Это основной метод для экспорта DataFrame в формат JSON. Он поддерживает несколько форматов JSON и может удовлетворять потребности различных сценариев, таких как Web API и обмен данными.
В реальной работе JSON — наиболее часто используемый формат данных в веб-приложениях,to_json()в сочетании сread_json()может реализовать импорт и экспорт данных.orientразличные форматы параметров и сопоставление сread_json()для использования.
Pandas: общие функции