Працювати з JSON та Pandas DataFrame є звичайним явищем в аналізі даних, звітуванні та ETL конвейерах. Хоча Pandas надає readjson для базового парсингу, він може не впоратися з глибоко вкладеними структурами, дуже великими файлами або робочими процесами на основі Excel. Ось тут на допомогу приходить Aspose.Cells for Python. Він надає багатий конвейер JSON в Excel, який ви можете легко інтегрувати з Pandas, щоб отримати чисті DataFrames для аналізу. У цьому блозі ви дізнаєтеся, як конвертувати JSON в DataFrame Pandas у Python.

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

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

З Aspose.Cells ви можете:

  • Імпортуйте JSON у таблиці за допомогою JsonUtility, з опціями для обробки масивів і вкладених структур.
  • Перетворіть діапазони аркушів на DataFrame Pandas для аналізу та візуалізації.
  • Створюйте, завантажуйте та обробляйте JSON у файлах Excel, які підходять для аналітичних конвеєрів.
  • Експортуйте DataFrame назад в Excel (XLSX, CSV, ODS, PDF) для звітування.

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

Convert JSON to DataFrame

Aspose.Cells імпортує JSON безпосередньо в робочу область. Ви потім читаєте рядок заголовка та дані рядків, щоб створити DataFrame Pandas.

Слідуйте наведеним крокам, щоб конвертувати JSON в DataFrame pandas:

  1. Створіть робочий зошит і отримайте перший аркуш.
  2. Налаштуйте JsonLayoutOptions, щоб обробляти масиви як таблиці.
  3. Import the JSON string at row 0, column 0.
  4. Використовуйте перший рядок як заголовки стовпців.
  5. Extract remaining rows as data.
  6. Build a Pandas DataFrame.

Наступний приклад коду показує, як конвертувати JSON у DataFrame pandas в Python:

import pandas as pd
import aspose.cells as ac

# Створіть нову книгу та отримайте перший аркуш (індекс з нуля)
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

Convert Nested JSON to Pandas DataFrame

Якщо ваш JSON містить вкладені об’єкти, Aspose.Cells імпортує JSON у робочу таблицю за допомогою JsonUtility, який ви потім можете експортувати в DataFrame. JsonLayoutOptions контролює, як масиви та вкладені об’єкти розгортаються.

Слідуйте наведеним крокам, щоб перетворити вкладений JSON в pandas DataFrame:

  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)

# Build 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
#    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 без обмежень функцій, застосувавши безкоштовну тимчасову ліцензію. Відвідайте temporary license page, щоб розблокувати повний функціонал, включаючи імпорт JSON (JsonUtility), контроль макета (JsonLayoutOptions), збереження схеми та конверсію чисел/дат.

Додаткові безкоштовні ресурси

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

Висновок

Перетворення JSON в DataFrame Pandas стає простим завдяки Aspose.Cells for Python. Ви отримуєте надійне управління вкладеними структурами, опції для стабільності схеми і легкий шлях для експорту в Excel, коли це необхідно. Поєднайте гнучкість Pandas з потоком JSON/Excel в Aspose.Cells, щоб спростити обробку даних і розблокувати потужний аналіз в Python.

Якщо у вас є запитання, відвідайте наш безкоштовний форум підтримки.Ми раді допомогти вам.

See Also