Функция Pandas df.to_json()

Pandas 常用函数Pandas: общие функции


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_bufstr, объект пути, файлоподобный объектПуть к файлу; возвращает строку, если NoneОтсутствует
orientstrФормат JSON: 'split', 'records', 'index', 'columns', 'values', 'table'Отсутствует
date_formatstrФормат даты: 'epoch', 'iso'Отсутствует
double_precisionintТочность чисел с плавающей запятой10
force_asciiboolПринудительно ли использовать ASCII-кодированиеTrue
date_unitstrЕдиница даты: 's', 'ms', 'us', 'ns''ms'
linesboolФормат JSON Lines, один JSON-объект на строкуFalse
indexboolВключать ли индексFalse

Возвращаемое значение

  • Тип возвращаемого значения:Noneилиstr
  • Если указан путь к файлу, записывает в файл и возвращает None.
  • Когдаpath_or_buf=NoneЕсли не указано, возвращает строку в формате JSON.

Примеры

С помощью следующих примеров всесторонне освойтеto_json()различные варианты использования.

Пример 1: Базовое использование — экспорт в строку JSON

Сначала создайте DataFrame, затем используйтеto_json()чтобы экспортировать его в формат JSON.

Пример

import pandas as pd

# Создать пример 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()и поддерживает несколько форматов вывода для разных потребностей.

Пример

import pandas as pd

# Создать 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 даты и китайская кодировка должны обрабатываться правильно.

Пример

import pandas as pd
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 на строку, обычно используется для логирования и обработки больших данных.

Пример

import pandas as pd

# Создать 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 常用函数Pandas: общие функции

Другие расширения