在数据分析、报告和ETL管道中,处理JSON和Pandas DataFrame是很常见的。虽然Pandas提供了readjson用于基本解析,但在深层嵌套结构、非常大的文件或Excel优先的工作流程中,它可能会遇到困难。这就是Aspose.Cells for Python的用武之地。它提供了丰富的JSON到Excel的管道,您可以轻松地将其与Pandas集成,以获取用于分析的干净DataFrame。在这篇博文中,您将学习如何在Python中将JSON转换为Pandas数据框。

将 JSON 转换为 Pandas DataFrame 的 Python 库

Aspose.Cells for Python via .NET 是一个强大的电子表格 API,不需要 Microsoft Excel。除了经典的 Excel 自动化外,它支持直接的 JSON 导入和导出,非常适合在您想要将 JSON 转换为 Pandas DataFrame,然后在 Excel 中保存或处理时使用。

使用 Aspose.Cells,您可以:

  • 使用 JsonUtility 将 JSON 导入工作表,同时提供处理数组和嵌套结构的选项。
  • 将工作表范围转换为 Pandas DataFrames 进行分析和可视化。
  • 在 Excel 文件中创建、加载和处理 JSON,以适应分析管道。
  • 将数据框导出回 Excel (XLSX, CSV, ODS, PDF) 以进行报告。

简而言之,该库使得将数据从 JSON 移动到 Excel 以进行报告变得简单,同时您可以使用 Pandas 进行更深层次的分析。 JsonUtility 将 JSON 导入到工作表中,而 JsonLayoutOptions 控制数组和嵌套对象的展开方式。

将 JSON 转换为 DataFrame

Aspose.Cells 直接将 JSON 导入到工作表中。然后,您可以读取标题行和数据行以构建 Pandas DataFrame。

请按照以下步骤将 JSON 转换为 pandas DataFrame:

  1. 创建一个工作簿并获取第一个工作表。
  2. 配置 JsonLayoutOptions 以将数组视为表格。
  3. 导入第 0 行,第 0 列的 JSON 字符串。
  4. 将第一行用作列标题。
  5. 提取剩余行作为数据。
  6. 构建一个 Pandas DataFrame。

以下代码示例展示了如何在 Python 中将 JSON 转换为 pandas DataFrame:

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 转换为 Pandas DataFrame

如果您的 JSON 包含嵌套对象,Aspose.Cells 使用 JsonUtility 将 JSON 导入工作表,然后您可以将其导出到 DataFrame。JsonLayoutOptions 控制数组和嵌套对象的展开方式。

按照以下步骤将嵌套的 JSON 转换为 pandas DataFrame:

  1. 创建一个工作簿并选择第一个工作表。
  2. 设置所需的 JsonLayoutOptions 属性,例如 arrayastable=Trueignorearraytitle=Trueignoreobjecttitle=Truekeptschema=True
  3. 导入位于第 0 行、第 0 列的嵌套 JSON。
  4. 检测使用的范围并跨越整个范围读取标题行。
  5. 阅读所有后续行,跨越相同的跨度(固定宽度)。
  6. 构建 DataFrame;可选择转换数据类型(例如,将 total 转换为数值型)。

以下代码示例演示了如何在Python中将嵌套的JSON转换为pandas DataFrame:

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)]

# 将标题设置为安全:用 \"Column{n}\" 替换 None/空值,并转换为字符串
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

通过 JSON 将 Excel 转换为 Pandas DataFrame

将任何 Excel 范围导出为 JSON,使用 Aspose.Cells,然后将该 JSON 加载到 Pandas 中作为 DataFrame。当您需要为服务或管道提供结构化的 JSON 交接时,这非常有用。

按照以下步骤通过 JSON 将 Excel 转换为 pandas DataFrame:

  1. 创建一个新工作簿,获取第一个工作表,并添加示例值。
  2. 创建 JsonSaveOptions 以使用默认值。
  3. 将已用范围导出为 JSON 字符串,使用 exportrangetojson() 方法。
  4. 使用 pd.readjson(io.StringIO(jsontext)) 方法将 JSON 字符串读取到 DataFrame 中。
  5. 检查或处理 DataFrame 以满足需要。

以下代码示例展示了如何通过 JSON 在 Python 中将 Excel 转换为 pandas DataFrame:

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 字符串读入 Pandas DataFrame
#    Pandas 可以直接解析 JSON 字符串
df = pd.read_json(io.StringIO(json_text))

# 使用数据框
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 via .NET,申请免费临时许可证以解除功能限制。访问 temporary license page 解锁全部功能,包括 JSON 导入(JsonUtility)、布局控制(JsonLayoutOptions)、架构保留以及数字/日期转换。

额外免费资源

您可以使用以下资源深入了解 JSON 导入、布局选项以及使用 Aspose.Cells for Python 进行其他 Excel 操作。

结论

使用 Aspose.Cells for Python 将 JSON 转换为 Pandas DataFrames 变得简单明了。您可以可靠地处理嵌套结构,选择架构稳定性选项,并在需要时轻松导出到 Excel。将 Pandas 的灵活性与 Aspose.Cells 中的 JSON/Excel 管道结合起来,简化数据处理,并在 Python 中解锁强大的分析功能。

如果您有问题,请访问我们的 免费支持论坛。我们很高兴为您提供帮助。

另请参阅