Метод DataFrame.to_json() в Pandas преобразует фрейм данных в строку JSON. Это может быть полезно, когда вам нужно сохранить или передать свой DataFrame в формате JSON, который является упрощенным форматом обмена данными.
Синтаксис
|
1 2 3 4 5 6 |
DataFrame.to_json(self, path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression='infer', index=True) |
Параметры
- path_or_buf: путь к файлу или объект. Результат возвращается в виде строки, если путь не указан. Параметр является необязательным.
- orient: указание ожидаемого формата строки JSON. Параметр является обязательным.
- Series
- по умолчанию ‘index’
- допустимые значения: {‘split’,’records’,’index’,’table’}
- DataFrame
- по умолчанию ‘columns’.
- допустимые значения: {‘split’,’records’,’index’,’columns’,’values’,’table’}
- Формат строки JSON
- ‘split’: словарь типа {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}
- ‘records’: список типа [{столбец -> значение}, …, {столбец -> значение}]
- ‘index’: словарь типа {index -> {column -> value}}
- ‘columns’: словарь типа {column -> {index -> value}}
- ‘values’: просто массив значений.
- ‘table’: словарь, подобный {‘schema’: {schema}, ‘data’: {data}}, описывающий данные, а компонент данных, подобный orient=’records’.
- date_format: единица времени для кодирования управления отметкой времени и точностью ISO8601. Один из ‘s’, ‘ms’, ‘us’, ‘ns’ для секунды, миллисекунды, микросекунды и наносекунды соответственно. Параметр является необязательным.
- default_handler: обработчик для вызова, если объект не может быть преобразован в подходящий формат для JSON. Должен получить один аргумент, который является объектом для преобразования и возврата сериализуемого объекта. Этот параметр является необязательным.
- lines: если ‘orient’ — это ‘records’, напишите в формате json с разделителями. Будет показано ValueError, если неправильный ‘orient’, поскольку другие не похожи на списки. Параметр является необязательным.
- compression: строка, представляющая сжатие в выходном файле, используется только в том случае, если первым аргументом является имя файла. По умолчанию сжатие определяется по имени файла. Этот параметр является необязательным.
- index: следует ли включать значения индекса в строку JSON? Отсутствие индекса (index=False) поддерживается только в том случае, если orient ‘split’ или ‘table’. Этот параметр является необязательным.
Возвращаемое значение
Если path_or_buf имеет значение None, он возвращает результирующий формат json в виде строки. В противном случае возвращает None.
Примеры программ с методом to_json()
Пример 1: Простой пример кода
Первым шагом будет создание DataFrame.
|
1 2 3 4 5 6 7 8 |
import pandas as pd # Creating Dataframe df = pd.DataFrame( [['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) print(df) |
Выход
|
1 2 3 |
Netflix Quibi 0 Stranger Things Money Heist 1 Most Dangerous Game The Stranger |
Давайте конвертируем DataFrame в JSON, используя функцию to_json().
|
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # Creating Dataframe df = pd.DataFrame( [['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) data = df.to_json(orient='index') print(data) |
Выход
|
1 2 |
{"0":{"Netflix":"Stranger Things","Quibi":"Money Heist"}, "1":{"Netflix":"Most Dangerous Game","Quibi":"The Stranger"}} |
Пример 2: orient = ‘columns’
|
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # Creating Dataframe df = pd.DataFrame( [['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) data = df.to_json(orient='columns') print(data) |
Выход
|
1 2 |
{"Netflix":{"0":"Stranger Things","1":"Most Dangerous Game"}, "Quibi":{"0":"Money Heist","1":"The Stranger"}} |
Пример 3: orient = ’table’
|
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # Creating Dataframe df = pd.DataFrame( [['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) data = df.to_json(orient='table') print(data) |
Выход
В зависимости от orient=’table’, если DataFrame с литеральным именем индекса index записывается с помощью to_json(), последующая операция чтения неправильно установит для имени индекса значение None.
Это связано с тем, что DataFrame также использует индекс .to_json() для обозначения отсутствующего имени индекса, и последующая операция read_json() не может их различить. Такое же ограничение встречается с MultiIndex и любыми именами, начинающимися с ‘level_’.
Пример 4: orient = ’values’
|
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # Creating Dataframe df = pd.DataFrame([['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) # Convert DataFrame to JSON data = df.to_json(orient='values') print(data) |
Выход
|
1 |
[["Stranger Things","Money Heist"],["Most Dangerous Game","The Stranger"]] |
Пример 5: orient = ’index’
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# app.py import pandas as pd # Creating Dataframe df = pd.DataFrame([['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) # Convert DataFrame to JSON data = df.to_json(orient='index') print(data) |
Выход
|
1 2 3 |
{"0":{"Netflix":"Stranger Things","Quibi":"Money Heist"}, "1":{"Netflix":"Most Dangerous Game","Quibi":"The Stranger"}} |
Пример 6: orient = ’records’
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # Creating Dataframe df = pd.DataFrame([['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) # Convert DataFrame to JSON data = df.to_json(orient='records') print(data) |
Выход
|
1 2 |
[{"Netflix":"Stranger Things","Quibi":"Money Heist"}, {"Netflix":"Most Dangerous Game","Quibi":"The Stranger"}] |
Пример 7: orient = ‘split’
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd # Creating Dataframe df = pd.DataFrame([['Stranger Things', 'Money Heist'], ['Most Dangerous Game', 'The Stranger']], columns=['Netflix', 'Quibi']) # Convert DataFrame to JSON data = df.to_json(orient='split') print(data) |
Выход
|
1 2 |
{"columns":["Netflix","Quibi"],"index":[0,1],"data":[["Stranger Things","Money Heist"], ["Most Dangerous Game","The Stranger"]]} |
