Функция Pandas pd.read_json()

Python math 模块Pandas: общие функции


read_json()Это функция библиотеки pandas, используемая для чтения файлов JSON (JavaScript Object Notation), поддерживающая импорт данных в нескольких форматах JSON.

JSON — это лёгкий формат обмена данными, который легко читается и записывается людьми, а также легко разбирается и генерируется машинами. Он широко используется в таких сценариях, как веб-API и конфигурационные файлы.read_json()Он может преобразовывать данные JSON в формат pandas DataFrame, упрощая анализ данных.


Базовый синтаксис и параметры

Формат синтаксиса

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', ...)

Описание параметра

ПараметрTypeОписаниеЗначение по умолчанию
path_or_bufstr, объект path или файлоподобный объектПуть к файлу JSON, URL или строкаОбязательный
orientstrФормат данных JSON: 'split', 'records', 'index', 'columns', 'values'Отсутствует
typstrТип возвращаемого значения: 'frame' возвращает DataFrame, 'series' возвращает Series'frame'
dtypedictУкажите типы данных столбцовОтсутствует
convert_axesboolПреобразовывать ли оси в datetimeОтсутствует
convert_datesbool, listПреобразовывать ли столбцы с датамиTrue
numpyboolИспользовать ли массивы numpyFalse

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

  • Тип возвращаемого значения:pd.DataFrameилиpd.Series
  • По умолчанию возвращает DataFrame, который может иметь форму двумерной таблицы.
  • Когдаtyp='series'Возвращает Series, если typ='series'.

Примеры

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

Пример 1: Чтение данных JSON в различных форматах

Данные JSON имеют несколько форматов,read_json()[Он] поддерживает наиболее распространённые форматы.

Пример

import pandas as pd
import json

# Пример данных: формат массива JSON (формат records)
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 в файл
with open('data_records.json', 'w', encoding='utf-8') as f:
    f.write(json_records)

# Чтение JSON-файла (формат records, наиболее часто используемый)
# orient='records' означает, что каждая строка — это объект JSON
df_records = pd.read_json('data_records.json', orient='records')
print("Формат records:")
print(df_records)
print()

# Пример данных: формат объекта JSON (формат индекса)
json_index = '''
{
    "Tom": {"age": 28, "city": "Пекин", "salary": 8000},
    "Jerry": {"age": 35, "city": "Шанхай", "salary": 12000},
    "Mike": {"age": 42, "city": "Гуанчжоу", "salary": 15000}
}
'''


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

# Прочитать файл JSON (формат индекса, используя поле в качестве индекса)
df_index = pd.read_json('data_index.json', orient='index')
print("Формат индекса:")
print(df_index)
print()

# Пример данных: формат столбцов JSON (формат columns)
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-файла (формат columns)
df_columns = pd.read_json('data_columns.json', orient='columns')
print("Формат столбцов:")
print(df_columns)

Ожидаемый вывод:

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

Пояснение к коду:

  • orient='records': Формат массива JSON, каждая строка — объект JSON, наиболее часто используемый формат.
  • orient='index': Формат объекта JSON, ключи служат индексом.
  • orient='columns': Формат колонок JSON, ключи — имена столбцов, значения — массивы.
  • Правильное указаниеorientпараметра критически важно для корректного разбора данных JSON.

Пример 2: Чтение JSON из строк и URL

read_json()Он умеет не только читать файлы, но также поддерживает чтение данных из строк и URL.

Пример

import pandas as pd
import json
from io import StringIO

# Пример 2a: Чтение из строки JSON
json_string = '''
[
    {"product": "A", "sales": 100, "region": "North"},
    {"product": "B", "sales": 200, "region": "South"},
    {"product": "C", "sales": 150, "region": "East"}
]
'''


# Используйте StringIO для преобразования строки в файловый объект
df_from_string = pd.read_json(StringIO(json_string))
print("Чтение из строки:")
print(df_from_string)
print()

# Вы также можете передать строку JSON напрямую в параметр
# Примечание: строки Python должны быть правильно экранированы
json_str_direct = '[{"product": "A", "sales": 100}, {"product": "B", "sales": 200}]'
df_direct = pd.read_json(json_str_direct)
print("Передайте строку напрямую:")
print(df_direct)
print()

# Пример 2b: Чтение формата JSON Lines (один объект JSON на строку)
# JSON Lines — распространённый формат логов
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)

# Формат JSON Lines требует чтения строка за строкой
# Вы можете использовать параметр lines=True (если формат JSONL это поддерживает)
# Или обработайте это вручную
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("Чтение формата JSON Lines:")
print(df_lines)
print()

# Пример 2c: Чтение из URL API (требуется доступ к сети)
# Здесь используется пример API; замените его на реальный URL при фактическом использовании
# df_api = pd.read_json('https://api.example.com/data')
# print(df_api)
print("Примечание: для чтения из URL требуется реальный сетевой запрос")

Ожидаемый вывод:

从字符串读取:
  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 读取需要实际的网络请求

Пояснение к коду:

  • read_json()Он может принимать строку JSON в качестве входных данных; используйтеStringIOчтобы преобразовать строку в файлоподобный объект.
  • Формат JSON Lines содержит один независимый объект JSON на строку, обычно используется при обработке логов; его нужно читать построчно, а затем объединять в DataFrame.
  • При чтении из URL просто передайте строку URL напрямую, но требуется поддержка сети.

Пример 3: Обработка дат и преобразование типов

Даты и числовые типы в данных JSON требуют специальной обработки.

Пример

import pandas as pd

# Пример 3a: Обработка полей даты
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)

# По умолчанию строки дат читаются как тип object
df_date = pd.read_json('data_with_date.json')
print("Чтение по умолчанию (даты как строки):")
print(df_date)
print("тип birthday:", df_date['birthday'].dtype)
print()

# Используйте convert_dates для автоматического преобразования столбцов с датами
df_date_converted = pd.read_json('data_with_date.json', convert_dates=['birthday', 'join_date'])
print("После преобразования дат:")
print(df_date_converted)
print("тип birthday:", df_date_converted['birthday'].dtype)
print()

# Пример 3b: Указание типов данных
json_mixed = '''
[
    {"id": "1", "name": "Том", "score": 85.5},
    {"id": "2", "name": "Джерри", "score": 92.0},
    {"id": "3", "name": "Майк", "score": 78.5}
]
'''


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

# По умолчанию id читается как целое число, name — как строка, а score — как число с плавающей точкой
df_mixed = pd.read_json('data_mixed.json')
print("Вывод типов по умолчанию:")
print(df_mixed)
print("тип id:", df_mixed['id'].dtype)
print()

# Используйте dtype, чтобы явно указать типы
df_typed = pd.read_json('data_mixed.json', dtype={'id': str, 'score': float})
print("После указания типов:")
print(df_typed)
print("тип id:", df_typed['id'].dtype)

Ожидаемый вывод:

默认读取(日期为字符串):
    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]

Пояснение к коду:

  • convert_datesПараметр может указывать, какие столбцы нужно преобразовать в типы даты.
  • По умолчанию,convert_dates=True[она] автоматически распознаёт распространённые форматы дат.
  • dtypeПараметр позволяет явно указать тип данных каждого столбца, избегая ошибок определения типов.

Примечания

  • Правильное указаниеorientпараметр — ключ к чтению данных JSON; разные структуры JSON требуют разных значений orient.
  • Даты в JSON по умолчанию читаются как строки; нужно использоватьconvert_datesпараметр для преобразования их в типы дат.
  • При чтении больших JSON-файлов рассмотрите возможность использованияchunksizeпараметра для чтения по частям.
  • read_json()[Она] поддерживает чтение из путей к файлам, URL-адресов и строк JSON.
  • Формат JSON Lines нужно разбирать построчно, а затем объединять в DataFrame.

Итог

read_json()Это основная функция в pandas для чтения данных JSON, поддерживающая множество форматов JSON. Как распространённый формат для веб-API и обмена данными, JSON широко используется в практической работе по анализу данных.

Освоениеread_json()ключ — понимание различныхorientформатов, а также методов обработки дат и типов. Читателям рекомендуется практиковаться в чтении данных JSON в разных форматах в своей практической работе.

Python math 模块Pandas: общие функции

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