pandas.read_json#

pandas.read_json(path_or_buf, *, orient=None, typ='frame', dtype=None, convert_axes=None, convert_dates=True, keep_default_dates=True, precise_float=False, date_unit=None, encoding=None, encoding_errors='strict', lines=False, chunksize=None, compression='infer', nrows=None, storage_options=None, dtype_backend=, engine='ujson')[источник]#

Преобразовать строку JSON в объект pandas.

Параметры:
path_or_bufвалидная JSON строка, объект пути или файлоподобный объект

Допустим любой корректный строковый путь. Строка может быть URL. Допустимые схемы URL включают http, ftp, s3 и file. Для file URL ожидается хост. Локальный файл может быть: file://localhost/path/to/table.json.

Если вы хотите передать объект пути, pandas принимает любой os.PathLike.

Под файлоподобным объектом мы подразумеваем объекты с read() метод, такой как файловый дескриптор (например, через встроенную функцию open функция) или StringIO.

Устарело с версии 2.1.0: Передача строковых литералов JSON устарела.

orientstr, optional

Указание ожидаемого формата JSON строки. Совместимые JSON строки могут быть созданы с помощью to_json() с соответствующим значением orient. Набор возможных значений orient:

  • 'split' : подобно словарю {index -> [index], columns -> [columns], data -> [values]}

  • 'records' : список подобных [{column -> value}, ... , {column -> value}]

  • 'index' : подобно словарю {index -> {column -> value}}

  • 'columns' : подобно словарю {column -> {index -> value}}

  • 'values' : только массив значений

  • 'table' : подобно словарю {'schema': {schema}, 'data': {data}}

Допустимые и значения по умолчанию зависят от значения typ параметр.

  • когда typ == 'series',

    • допустимые ориентации: {'split','records','index'}

    • по умолчанию 'index'

    • Индекс Series должен быть уникальным для orient 'index'.

  • когда typ == 'frame',

    • допустимые ориентации: {'split','records','index', 'columns','values', 'table'}

    • по умолчанию 'columns'

    • Индекс DataFrame должен быть уникальным для ориентаций 'index' и 'columns'.

    • Столбцы DataFrame должны быть уникальными для ориентаций 'index', 'columns', и 'records'.

typ{‘frame’, ‘series’}, по умолчанию ‘frame’

Тип объекта для восстановления.

dtypebool или dict, по умолчанию None

Если True, выводить типы данных; если словарь столбец-тип данных, то использовать их; если False, то не выводить типы данных вообще, применяется только к данным.

Для всех orient значения, кроме 'table', по умолчанию True.

convert_axesbool, по умолчанию None

Попытаться преобразовать оси к правильным типам данных.

Для всех orient значения, кроме 'table', по умолчанию True.

convert_datesbool или список строк, по умолчанию True

Если True, то стандартные столбцы с датами могут быть преобразованы (в зависимости от keep_default_dates). Если False, даты не будут преобразованы. Если указан список имен столбцов, то эти столбцы будут преобразованы, а стандартные столбцы с датами также могут быть преобразованы (в зависимости от keep_default_dates).

keep_default_datesbool, по умолчанию True

Если выполняется разбор дат (convert_dates не False), то попытаться разобрать столбцы по умолчанию, похожие на даты. Метка столбца считается похожей на дату, если

  • он заканчивается на '_at',

  • он заканчивается на '_time',

  • начинается с 'timestamp',

  • это 'modified', или

  • это 'date'.

precise_floatbool, по умолчанию False

Установите для использования функции более высокой точности (strtod) при декодировании строки в значения double. По умолчанию (False) используется быстрая, но менее точная встроенная функциональность.

date_unitstr, по умолчанию None

Единица времени для определения при преобразовании дат. Поведение по умолчанию — попытка определить правильную точность, но если это нежелательно, то передайте одно из значений 's', 'ms', 'us' или 'ns', чтобы принудительно выполнить разбор только секунд, миллисекунд, микросекунд или наносекунд соответственно.

кодировкаstr, по умолчанию 'utf-8'

Кодировка, используемая для декодирования байтов py3.

encoding_errorsstr, опционально, по умолчанию "strict"

Как обрабатываются ошибки кодировки. Список возможных значений .

Добавлено в версии 1.3.0.

строкиbool, по умолчанию False

Читать файл как объект json построчно.

chunksizeint, необязательный

Возвращает объект JsonReader для итерации. Смотрите json документы с разделением по строкам для получения дополнительной информации о chunksize. Это можно передать только если lines=True. Если это None, файл будет прочитан в память целиком.

compressionстрока или словарь, по умолчанию ‘infer’

Для динамической декомпрессии данных на диске. Если 'infer' и 'path_or_buf' является путем, то определить сжатие по следующим расширениям: '.gz', '.bz2', '.zip', '.xz', '.zst', '.tar', '.tar.gz', '.tar.xz' или '.tar.bz2' (в противном случае без сжатия). Если используется 'zip' или 'tar', ZIP-файл должен содержать только один файл данных для чтения. Установить в None для отсутствия распаковки. Также может быть словарём с ключом 'method' установить в одно из {'zip', 'gzip', 'bz2', 'zstd', 'xz', 'tar'} и другие пары ключ-значение передаются в zipfile.ZipFile, gzip.GzipFile, bz2.BZ2File, zstandard.ZstdDecompressor, lzma.LZMAFile или tarfile.TarFile, соответственно. В качестве примера, следующее может быть передано для декомпрессии Zstandard с использованием пользовательского словаря сжатия: compression={'method': 'zstd', 'dict_data': my_compression_dict}.

Добавлено в версии 1.5.0: Добавлена поддержка для .tar файлы.

Изменено в версии 1.4.0: Поддержка Zstandard.

nrowsint, необязательный

Количество строк из файла JSON с разделителями строк, которые необходимо прочитать. Это можно передать только если lines=True. Если это None, будут возвращены все строки.

storage_optionsdict, optional

Дополнительные параметры, которые имеют смысл для конкретного соединения с хранилищем, например, хост, порт, имя пользователя, пароль и т.д. Для HTTP(S) URL пары ключ-значение передаются в urllib.request.Request в качестве параметров заголовка. Для других URL-адресов (например, начинающихся с "s3://" и "gcs://") пары ключ-значение передаются fsspec.open. Пожалуйста, смотрите fsspec и urllib для получения дополнительной информации, а для дополнительных примеров по опциям хранения см. здесь.

dtype_backend{'numpy_nullable', 'pyarrow'}, по умолчанию 'numpy_nullable'

Тип данных бэкенда, примененный к результирующему DataFrame (все еще экспериментальная). Поведение следующее:

  • "numpy_nullable": возвращает поддерживаемый нуллифицируемым типом данных DataFrame (по умолчанию).

  • "pyarrow": возвращает nullable на основе pyarrow ArrowDtype DataFrame.

Добавлено в версии 2.0.

движок{“ujson”, “pyarrow”}, по умолчанию “ujson”

Движок парсера для использования. "pyarrow" движок доступен только когда lines=True.

Добавлено в версии 2.0.

Возвращает:
Series, DataFrame или pandas.api.typing.JsonReader

JsonReader возвращается, когда chunksize не является 0 или None. В противном случае тип возвращаемого значения зависит от значения typ.

Смотрите также

DataFrame.to_json

Преобразовать DataFrame в строку JSON.

Series.to_json

Преобразовать Series в строку JSON.

json_normalize

Нормализация полуструктурированных JSON-данных в плоскую таблицу.

Примечания

Специфично для orient='table', если DataFrame с литералом Index имя index записывается с to_json(), последующая операция чтения неправильно установит Index имя для None. Это связано с тем, что index также используется DataFrame.to_json() для обозначения отсутствующего Index имя, и последующий read_json() операция не может различить эти два. Такое же ограничение встречается с MultiIndex и любые имена, начинающиеся с 'level_'.

Примеры

>>> from io import StringIO
>>> df = pd.DataFrame([['a', 'b'], ['c', 'd']],
...                   index=['row 1', 'row 2'],
...                   columns=['col 1', 'col 2'])

Кодирование/декодирование Dataframe с использованием 'split' форматированный JSON:

>>> df.to_json(orient='split')
    '{"columns":["col 1","col 2"],"index":["row 1","row 2"],"data":[["a","b"],["c","d"]]}'
>>> pd.read_json(StringIO(_), orient='split')
      col 1 col 2
row 1     a     b
row 2     c     d

Кодирование/декодирование Dataframe с использованием 'index' форматированный JSON:

>>> df.to_json(orient='index')
'{"row 1":{"col 1":"a","col 2":"b"},"row 2":{"col 1":"c","col 2":"d"}}'
>>> pd.read_json(StringIO(_), orient='index')
      col 1 col 2
row 1     a     b
row 2     c     d

Кодирование/декодирование Dataframe с использованием 'records' форматированный JSON. Обратите внимание, что метки индекса не сохраняются при таком кодировании.

>>> df.to_json(orient='records')
'[{"col 1":"a","col 2":"b"},{"col 1":"c","col 2":"d"}]'
>>> pd.read_json(StringIO(_), orient='records')
  col 1 col 2
0     a     b
1     c     d

Кодирование с Table Schema

>>> df.to_json(orient='table')
    '{"schema":{"fields":[{"name":"index","type":"string"},{"name":"col 1","type":"string"},{"name":"col 2","type":"string"}],"primaryKey":["index"],"pandas_version":"1.4.0"},"data":[{"index":"row 1","col 1":"a","col 2":"b"},{"index":"row 2","col 1":"c","col 2":"d"}]}'

Следующий пример использует dtype_backend="numpy_nullable"

>>> data = '''{"index": {"0": 0, "1": 1},
...        "a": {"0": 1, "1": null},
...        "b": {"0": 2.5, "1": 4.5},
...        "c": {"0": true, "1": false},
...        "d": {"0": "a", "1": "b"},
...        "e": {"0": 1577.2, "1": 1577.1}}'''
>>> pd.read_json(StringIO(data), dtype_backend="numpy_nullable")
   index     a    b      c  d       e
0      0     1  2.5   True  a  1577.2
1      1    4.5  False  b  1577.1