在数据分析、报告和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:
- 创建一个工作簿并获取第一个工作表。
- 配置
JsonLayoutOptions
以将数组视为表格。 - 导入第
0
行,第0
列的 JSON 字符串。 - 将第一行用作列标题。
- 提取剩余行作为数据。
- 构建一个 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:
- 创建一个工作簿并选择第一个工作表。
- 设置所需的
JsonLayoutOptions
属性,例如arrayastable=True
、ignorearraytitle=True
、ignoreobjecttitle=True
和keptschema=True
。 - 导入位于第
0
行、第0
列的嵌套 JSON。 - 检测使用的范围并跨越整个范围读取标题行。
- 阅读所有后续行,跨越相同的跨度(固定宽度)。
- 构建 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:
- 创建一个新工作簿,获取第一个工作表,并添加示例值。
- 创建
JsonSaveOptions
以使用默认值。 - 将已用范围导出为 JSON 字符串,使用
exportrangetojson()
方法。 - 使用
pd.readjson(io.StringIO(jsontext))
方法将 JSON 字符串读取到 DataFrame 中。 - 检查或处理 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 中解锁强大的分析功能。
如果您有问题,请访问我们的 免费支持论坛。我们很高兴为您提供帮助。