Làm việc với JSON và Pandas DataFrame là điều phổ biến trong phân tích dữ liệu, báo cáo và quy trình ETL. Trong khi Pandas cung cấp readjson để phân tích cơ bản, nó có thể gặp khó khăn với các cấu trúc lồng ghép sâu, các tệp rất lớn hoặc quy trình làm việc ưu tiên Excel. Đây là nơi Aspose.Cells for Python giúp đỡ. Nó cung cấp một quy trình JSON-to-Excel phong phú, mà bạn có thể dễ dàng tích hợp với Pandas để có được các DataFrame rõ ràng cho phân tích. Trong bài viết trên blog này, bạn sẽ học cách chuyển đổi JSON thành các DataFrame Pandas trong Python.

Thư viện Python để chuyển đổi JSON thành DataFrame Pandas

Aspose.Cells for Python via .NET là một API bảng tính mạnh mẽ không cần Microsoft Excel. Ngoài việc tự động hóa Excel cổ điển, nó hỗ trợ nhập và xuất JSON trực tiếp, điều này làm cho nó trở nên lý tưởng khi bạn muốn chuyển đổi JSON thành một DataFrame của Pandas và sau đó lưu hoặc xử lý nó trong Excel.

Với Aspose.Cells, bạn có thể:

  • Nhập JSON vào bảng tính sử dụng JsonUtility, với các tùy chọn để xử lý mảng và cấu trúc lồng.
  • Chuyển đổi các khoảng worksheet thành Pandas DataFrames để phân tích và trực quan hóa.
  • Tạo, tải và xử lý JSON bên trong các tệp Excel, phù hợp với các quy trình phân tích.
  • Xuất DataFrames trở lại Excel (XLSX, CSV, ODS, PDF) để báo cáo.

Tóm lại, thư viện này giúp dễ dàng chuyển dữ liệu từ JSON sang Excel cho báo cáo, trong khi bạn sử dụng Pandas để phân tích sâu hơn. Thư viện JsonUtility nhập JSON vào một bảng tính, và JsonLayoutOptions kiểm soát cách mà các mảng và đối tượng lồng nhau được mở rộng.

Chuyển đổi JSON thành DataFrame

Aspose.Cells nhập JSON trực tiếp vào một bảng tính. Sau đó, bạn đọc hàng tiêu đề và các hàng dữ liệu để xây dựng một DataFrame Pandas.

Làm theo các bước dưới đây để chuyển đổi JSON thành DataFrame pandas:

  1. Tạo một sổ tay và lấy bảng tính đầu tiên.
  2. Cấu hình JsonLayoutOptions để xử lý các mảng như các bảng.
  3. Import the JSON string at row 0, column 0.
  4. Sử dụng hàng đầu tiên làm tiêu đề cột.
  5. Trích xuất các hàng còn lại dưới dạng dữ liệu.
  6. Xây dựng một DataFrame Pandas.

Ví dụ mã sau đây cho thấy cách chuyển đổi JSON thành DataFrame pandas trong Python:

import pandas as pd
import aspose.cells as ac

# Tạo một sổ làm việc mới và lấy bảng tính đầu tiên (chỉ số bắt đầu từ 0)
wb = ac.Workbook()
ws = wb.worksheets.get(0)

# Cấu hình cách JSON nên được sắp xếp trong bảng tính
options = ac.utility.JsonLayoutOptions()
options.array_as_table = True           # Treat a top-level JSON array as a table (rows/columns)

# Ví dụ về mảng JSON gồm các đối tượng đơn giản
json_data = '[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]'

# Nhập JSON vào bảng tính bắt đầu từ hàng=0, cột=0 (ô A1)
ac.utility.JsonUtility.import_data(json_data, ws.cells, 0, 0, options)

# Xác định hàng đầu tiên chứa dữ liệu (đây sẽ là hàng tiêu đề của chúng tôi)
header_idx = ws.cells.min_data_row

# Trích xuất các giá trị tiêu đề từ hàng đó để sử dụng làm tên cột DataFrame.
columns = [cell.value for cell in ws.cells.rows[header_idx]]

# Trích xuất tất cả các hàng tiếp theo dưới dạng dữ liệu (bỏ qua hàng tiêu đề)
data = [
    [cell.value for cell in row]
   for idx, row in enumerate(ws.cells.rows)
    if row and idx != header_idx
]

# Xây dựng DataFrame sử dụng các tiêu đề và hàng đã thu thập.
df = pd.DataFrame(data, columns=columns)

# Display the result
print(df)

Output

    id   name
0  1.0  Alice
1  2.0    Bob

Chuyển đổi JSON lồng nhau thành DataFrame Pandas

Nếu JSON của bạn chứa các đối tượng lồng nhau, Aspose.Cells nhập JSON vào một bảng tính bằng cách sử dụng JsonUtility, mà bạn có thể sau đó xuất sang một DataFrame. Các JsonLayoutOptions kiểm soát cách các mảng và đối tượng lồng nhau được mở rộng.

Làm theo các bước bên dưới để chuyển đổi JSON lồng vào một DataFrame pandas:

  1. Tạo một sổ làm việc và chọn trang tính đầu tiên.
  2. Đặt các thuộc tính JsonLayoutOptions cần thiết như arrayastable=True, ignorearraytitle=True, ignoreobjecttitle=True, và keptschema=True.
  3. Nhập JSON lồng bên trong tại hàng 0, cột 0.
  4. Xác định phạm vi đã sử dụng và đọc hàng tiêu đề trên toàn bộ phạm vi.
  5. Đọc tất cả các hàng tiếp theo qua cùng một khoảng (độ rộng cố định).
  6. Xây dựng DataFrame; tùy chọn chuyển đổi kiểu dữ liệu (ví dụ, total thành kiểu số).

Ví dụ mã sau đây cho thấy cách chuyển đổi JSON lồng nhau thành DataFrame của pandas trong Python:

import pandas as pd
import aspose.cells as ac

# Tạo Sổ tay và lấy bảng tính đầu tiên
wb = ac.Workbook()
ws = wb.worksheets.get(0)

# Tùy chọn bố cục cho JSON lồng nhau
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

# Bước 3: JSON lồng của bạn
nested = '''
{
  "batch": "A1",
  "orders": [
    {"orderId": "1001", "total": "49.90", "buyer": {"city": "NYC", "zip": "10001"}},
    {"orderId": "1002", "total": "79.00", "buyer": {"city": "Boston", "zip": "02108"}}
  ]
}
'''

# Nhập tại A1 (hàng=0, cột=0) sử dụng các tùy chọn trên
ac.utility.JsonUtility.import_data(nested, ws.cells, 0, 0, opt)

# Xác định phạm vi sử dụng
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

# Đọc hàng tiêu đề trên toàn bộ khoảng cột đã sử dụng (độ rộng cố định)
raw_columns = [ws.cells.get(first_row, c).value for c in range(first_col, last_col + 1)]

# Make headers safe: replace None/blank with "Column{n}" and cast to 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)
]

# Đọc các hàng dữ liệu trên cùng một khoảng (độ rộng cố định đảm bảo căn chỉnh)
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)

# Xây dựng DataFrame
df = pd.DataFrame(data, columns=columns)

# Tùy chọn: dọn dẹp tên cột (ví dụ: thay thế khoảng trắng)
df.columns = [str(c).strip() for c in df.columns]

# Tùy chọn gõ:
# - Giữ ZIP dưới dạng chuỗi (các số 0 đứng đầu có ý nghĩa)
# - Chuyển đổi tổng thành số (ép buộc không phải số thành 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

Lưu ý: Nếu bạn bật convertnumericordate=True, các chuỗi trông giống số (ví dụ: tổng số) có thể chuyển đổi thành số, nhưng mã ZIP như \"02108\" có thể mất đi các số 0 ở đầu. Giữ nó ở trạng thái False nếu bạn cần mã ZIP dưới dạng chuỗi.

Chuyển đổi Excel sang Pandas DataFrame qua JSON

Xuất bất kỳ phạm vi Excel nào sang JSON với Aspose.Cells, sau đó tải JSON đó vào Pandas dưới dạng DataFrame. Điều này rất hữu ích khi bạn cần một chuyển giao JSON có cấu trúc cho các dịch vụ hoặc pipeline.

Theo các bước dưới đây để chuyển đổi Excel thành DataFrame pandas qua JSON:

  1. Tạo một workbook mới, lấy bảng tính đầu tiên và thêm các giá trị mẫu.
  2. Tạo JsonSaveOptions với mặc định.
  3. Xuất phạm vi đã sử dụng thành một chuỗi JSON bằng phương pháp exportrangetojson().
  4. Đọc chuỗi JSON vào một DataFrame bằng phương thức pd.readjson(io.StringIO(jsontext)).
  5. Kiểm tra hoặc xử lý DataFrame theo yêu cầu.

Ví dụ mã sau đây cho thấy cách chuyển đổi Excel thành một pandas DataFrame thông qua JSON trong Python:

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

# Tạo một sổ làm việc mới và truy cập vào trang tính đầu tiên
workbook = Workbook()
worksheet = workbook.worksheets.get(0)

# Lấy các ô của bảng tính
cells = worksheet.cells

# Populated a small table (headers + rows)
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"

# Cài đặt tùy chọn lưu JSON (các giá trị mặc định thì ổn cho một bảng đơn giản)
json_save_options = JsonSaveOptions()

# Xuất phạm vi đã sử dụng thành chuỗi JSON
# maxdisplayrange lấy toàn bộ vùng hình chữ nhật chứa dữ liệu
json_text = JsonUtility.export_range_to_json(cells.max_display_range, json_save_options)

# Đọc chuỗi JSON vào một DataFrame của Pandas
#    Pandas có thể phân tích một chuỗi JSON trực tiếp.
df = pd.read_json(io.StringIO(json_text))

# Sử dụng DataFrame
print(df)

Output

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

Nhận Giấy phép Miễn phí

Đánh giá Aspose.Cells for Python thông qua .NET mà không bị giới hạn tính năng bằng cách áp dụng giấy phép tạm thời miễn phí. Truy cập trang temporary license page để mở khóa đầy đủ chức năng, bao gồm nhập JSON (JsonUtility), kiểm soát bố cục (JsonLayoutOptions), bảo tồn sơ đồ và chuyển đổi số/ngày.

Tài nguyên miễn phí bổ sung

Bạn có thể sử dụng các tài nguyên dưới đây để tìm hiểu sâu hơn về việc nhập JSON, các tùy chọn bố cục và các thao tác Excel khác với Aspose.Cells for Python.

Kết luận

Chuyển đổi JSON thành Pandas DataFrames trở nên đơn giản với Aspose.Cells for Python. Bạn có được khả năng xử lý đáng tin cậy cho các cấu trúc lồng nhau, các tùy chọn cho sự ổn định của schema, và một lối đi dễ dàng để xuất ra Excel khi cần. Kết hợp sự linh hoạt của Pandas với quy trình JSON/Excel trong Aspose.Cells để đơn giản hóa việc xử lý dữ liệu và mở khóa phân tích mạnh mẽ trong Python.

Nếu bạn có câu hỏi, hãy truy cập diễn đàn hỗ trợ miễn phí.Chúng tôi rất vui khi được giúp bạn.

Xem thêm