Работа с JSON и Pandas DataFrame является распространенной практикой в анализе данных, отчетности и ETL-пайплайнах. Хотя Pandas предоставляет readjson для базового парсинга, он может испытывать трудности с глубоко嵌套ными структурами, очень большими файлами или рабочими процессами, ориентированными на Excel. Здесь на помощь приходит Aspose.Cells for Python. Он предоставляет обширный конвейер JSON-в-Excel, который вы можете легко интегрировать с Pandas, чтобы получить чистые DataFrames для анализа. В этом блоге вы узнаете, как конвертировать JSON в DataFrames Pandas в Python.

Библиотека Python для преобразования JSON в DataFrame Pandas

Aspose.Cells for Python via .NET — это мощный API для работы с электронными таблицами, который не требует Microsoft Excel. Помимо классической автоматизации Excel, он поддерживает прямой импорт и экспорт JSON, что делает его идеальным, когда вы хотите конвертировать JSON в DataFrame Pandas, а затем сохранить или обработать его в Excel.

С помощью Aspose.Cells вы можете:

  • Импортируйте JSON в рабочие листы, используя JsonUtility, с опциями для обработки массивов и вложенных структур.
  • Преобразуйте диапазоны рабочего листа в DataFrame Pandas для анализа и визуализации.
  • Создайте, загрузите и управляйте JSON внутри Excel файлов, которые подходят для аналитических потоков.
  • Экспортируйте DataFrames обратно в Excel (XLSX, CSV, ODS, PDF) для отчетности.

Вкратце, библиотека упрощает перенос данных из JSON в Excel для отчетности, в то время как вы используете Pandas для более глубокого анализа. JsonUtility импортирует JSON в рабочий лист, а JsonLayoutOptions управляет тем, как массивы и вложенные объекты расширяются.

Конвертировать JSON в DataFrame

Aspose.Cells импортирует JSON непосредственно в рабочий лист. Затем вы считываете строку заголовка и строки данных, чтобы построить DataFrame Pandas.

Следуйте приведенным ниже шагам, чтобы преобразовать JSON в DataFrame pandas:

  1. Создайте рабочую книгу и получите первый лист.
  2. Настройте JsonLayoutOptions, чтобы обрабатывать массивы как таблицы.
  3. Импортируйте строку JSON в строке 0, столбце 0.
  4. Используйте первую строку в качестве заголовков столбцов.
  5. Извлеките оставшиеся строки как данные.
  6. Составьте DataFrame в Pandas.

Следующий пример кода показывает, как преобразовать JSON в DataFrame pandas в Python:

import pandas as pd
import aspose.cells as ac

# Создайте новую книгу и получите первый рабочий лист (индекс с 0).
wb = ac.Workbook()
ws = wb.worksheets.get(0)

# Настройте, как JSON должен быть разложен в рабочем листе.
options = ac.utility.JsonLayoutOptions()
options.array_as_table = True           # Treat a top-level JSON array as a table (rows/columns)

# Пример массива JSON простых объектов
json_data = '[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]'

# Импортируйте JSON в рабочий лист, начиная с строки=0, столбца=0 (ячейка A1)
ac.utility.JsonUtility.import_data(json_data, ws.cells, 0, 0, options)

# Найдите первую строку, которая содержит данные (это будет наша строка заголовка)
header_idx = ws.cells.min_data_row

# Извлеките значения заголовков из этой строки, чтобы использовать в качестве имен столбцов DataFrame.
columns = [cell.value for cell in ws.cells.rows[header_idx]]

# Извлеките все последующие строки как данные (пропустите строку заголовка)
data = [
    [cell.value for cell in row]
   for idx, row in enumerate(ws.cells.rows)
    if row and idx != header_idx
]

# Постройте DataFrame, используя собранные заголовки и строки
df = pd.DataFrame(data, columns=columns)

# Display the result
print(df)

Output

    id   name
0  1.0  Alice
1  2.0    Bob

Преобразовать вложенный JSON в DataFrame Pandas

Если ваш JSON содержит вложенные объекты, Aspose.Cells импортирует JSON в рабочий лист, используя JsonUtility, который вы затем можете экспортировать в DataFrame. JsonLayoutOptions управляет тем, как массивы и вложенные объекты разворачиваются.

Следуйте приведённым ниже шагам, чтобы преобразовать вложенный JSON в DataFrame pandas:

  1. Создайте рабочую книгу и выберите первый лист.
  2. Установите необходимые свойства JsonLayoutOptions, такие как arrayastable=True, ignorearraytitle=True, ignoreobjecttitle=True и keptschema=True.
  3. Импортируйте вложенный JSON в строке 0, столбце 0.
  4. Определите используемый диапазон и прочитайте строку заголовка по всему диапазону.
  5. Читаем все последующие строки по тому же диапазону (фике сированной ширины).
  6. Создайте DataFrame; при желании измените типы данных (например, total на числовой).

Пример кода ниже показывает, как преобразовать вложенный JSON в DataFrame pandas на Python:

import pandas as pd
import aspose.cells as ac

# Создайте рабочую книгу и получите первый лист.
wb = ac.Workbook()
ws = wb.worksheets.get(0)

# Опции компоновки для вложенного JSON
opt = ac.utility.JsonLayoutOptions()
opt.array_as_table = True  # Treat 'orders' array as a table (rows)
opt.ignore_array_title = True  # Do not place a title row for the 'orders' array
opt.ignore_object_title = True  # Do not place extra title rows for nested objects (e.g., 'buyer')
opt.kept_schema = True  # Keep a stable set of columns even if some records miss fields

# Шаг 3: Ваш вложенный JSON
nested = '''
{
  "batch": "A1",
  "orders": [
    {"orderId": "1001", "total": "49.90", "buyer": {"city": "NYC", "zip": "10001"}},
    {"orderId": "1002", "total": "79.00", "buyer": {"city": "Boston", "zip": "02108"}}
  ]
}
'''

# Импортируйте на A1 (строка=0, колонка=0) с использованием вышеуказанных параметров
ac.utility.JsonUtility.import_data(nested, ws.cells, 0, 0, opt)

# Определить используемый диапазон
first_row = ws.cells.min_data_row
first_col = ws.cells.min_data_column
last_row = ws.cells.max_data_row
last_col = ws.cells.max_data_column

# Прочитайте строку заголовка по всему используемому диапазону столбцов (фиксированная ширина)
raw_columns = [ws.cells.get(first_row, c).value for c in range(first_col, last_col + 1)]

# Сделайте заголовки безопасными: замените None/пустые значения на \"Column{n}\" и преобразуйте в str.
columns = [
    (str(v) if v is not None and str(v).strip() != "" else f"Column{idx + 1}")
   for idx, v in enumerate(raw_columns)
]

# Читать строки данных в одном диапазоне (фиксированная ширина гарантирует выравнивание)
data = []
for r in range(first_row + 1, last_row + 1):
    row_vals = [ws.cells.get(r, c).value for c in range(first_col, last_col + 1)]
    data.append(row_vals)

# Построить DataFrame
df = pd.DataFrame(data, columns=columns)

# Необязательно: привести названия столбцов в порядок (например, заменить пробелы)
df.columns = [str(c).strip() for c in df.columns]

# Необязательный ввод:
# - Сохраняйте ZIP-коды в виде строк (ведущие нули имеют значение)
# - Преобразуйте итоги в числовой формат (принудительно преобразуйте нечисловые значения в NaN)
for col in list(df.columns):
    if col.lower().endswith("total"):
        df[col] = pd.to_numeric(df[col], errors="coerce")

# Print
print(df)

Output

     A1  1001  49.90     NYC  10001
0  None  1002  79.00  Boston  02108

Примечание: Если вы включите convertnumericordate=True, строки, выглядящие как числа (например, итоги), могут быть преобразованы в числа, но почтовые коды, такие как \"02108\", могут потерять начальные нули. Оставьте это значение False, если вам нужны почтовые коды в виде строк.

Преобразовать Excel в Pandas DataFrame через JSON

Экспортируйте любой диапазон Excel в JSON с помощью Aspose.Cells, затем загрузите этот JSON в Pandas в виде DataFrame. Это полезно, когда вам нужно передать структурированный JSON для служб или конвейеров.

Следуйте инструкциям ниже, чтобы преобразовать Excel в DataFrame pandas через JSON:

  1. Создайте новую книгу, получите первый лист и добавьте примеры значений.
  2. Создайте JsonSaveOptions с настройками по умолчанию.
  3. Экспортируйте используемый диапазон в строку JSON с помощью метода exportrangetojson().
  4. Прочитайте строку JSON в DataFrame, используя метод pd.readjson(io.StringIO(jsontext)).
  5. Проверьте или обработайте DataFrame по мере необходимости.

Следующий пример кода показывает, как преобразовать Excel в DataFrame pandas через JSON на Python:

import io
import pandas as pd
from aspose.cells.utility import JsonUtility  # JSON export utility
from aspose.cells import Workbook, JsonSaveOptions, License

# Создайте новую книгу и получите доступ к первому листу.
workbook = Workbook()
worksheet = workbook.worksheets.get(0)

# Получить ячейки рабочего листа
cells = worksheet.cells

# Заполните небольшую таблицу (заголовки + строки)
cells.get("A1").value = "Name"
cells.get("B1").value = "Age"
cells.get("C1").value = "City"

cells.get("A2").value = "Alice"
cells.get("B2").value = 25
cells.get("C2").value = "New York"

cells.get("A3").value = "Bob"
cells.get("B3").value = 30
cells.get("C3").value = "San Francisco"

cells.get("A4").value = "Charlie"
cells.get("B4").value = 35
cells.get("C4").value = "Los Angeles"

# Настройте параметры сохранения JSON (по умолчанию подходят для простой таблицы)
json_save_options = JsonSaveOptions()

# Экспортируйте используемый диапазон в строку JSON
# maxdisplayrange захватывает всю прямоугольную область, содержащую данные.
json_text = JsonUtility.export_range_to_json(cells.max_display_range, json_save_options)

# Прочитайте строку JSON в DataFrame Pandas
#    Панды могут напрямую разбивать строку JSON
df = pd.read_json(io.StringIO(json_text))

# Используйте DataFrame
print(df)

Output

      Name  Age           City
0    Alice   25       New York
1      Bob   30  San Francisco
2  Charlie   35    Los Angeles

Получите бесплатную лицензию

Оцените Aspose.Cells for Python через .NET без ограничений по функциональным возможностям, применяя бесплатную временную лицензию. Посетите страницу временной лицензии, чтобы разблокировать полный функционал, включая импорт JSON (JsonUtility), управление макетом (JsonLayoutOptions), сохранение схемы и преобразование чисел/дат.

Дополнительные бесплатные ресурсы

Вы можете использовать ресурсы ниже, чтобы углубиться в импорт JSON, параметры макета и другие манипуляции с Excel с помощью Aspose.Cells for Python.

Заключение

Преобразование JSON в DataFrames Pandas становится простым с помощью Aspose.Cells for Python. Вы получаете надежную обработку вложенных структур, варианты для стабильности схемы и простой путь к экспорту в Excel, когда это необходимо. Сочетайте гибкость Pandas с конвейером JSON/Excel в Aspose.Cells, чтобы упростить обработку данных и разблокировать мощный анализ в Python.

Если у вас есть вопросы, посетите наш free support forum.Мы рады вам помочь.

See Also