You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将指定结构的JSON数组转换为目标格式的DataFrame?

如何将嵌套JSON数组转换为指定格式的DataFrame

我来帮你搞定这个转换需求,用Python的pandas库就能轻松实现,下面是具体的步骤和代码示例:

步骤说明

  1. 结构化原始数据:先把嵌套的JSON数组拆解成维度、金额类型、金额值的结构化字典列表;
  2. 转换为初始DataFrame:将结构化列表转换成pandas的长表格式DataFrame;
  3. 重塑为宽表:使用pivot方法把长表转成你需要的宽表结构;
  4. 优化格式:调整列名,让最终结果完全匹配你的要求。

完整代码示例

import pandas as pd

# 你的原始JSON数组数据
raw_data = [
 [
  {"value": "Dimension1", "formattedValue": "Dimension1"},
  {"value": "Amount1", "formattedValue": "Amount1"},
  {"value": "17253512.430000003", "formattedValue": "17,253,512.43"}
 ],
 [
  {"value": "Dimension1", "formattedValue": "Dimension1"},
  {"value": "Amount2", "formattedValue": "Amount2"},
  {"value": "-143721131.88999993", "formattedValue": "-143,721,131.89"}
 ],
 [
  {"value": "Dimension1", "formattedValue": "Dimension1"},
  {"value": "Amount3", "formattedValue": "Amount3"},
  {"value": "160974644.31999999", "formattedValue": "160,974,644.32"}
 ]
]

# 第一步:处理原始数据,提取关键信息
processed_rows = []
for entry in raw_data:
    # 提取维度、金额类型、格式化后的金额值
    dimension = entry[0]['formattedValue']
    amount_category = entry[1]['formattedValue']
    amount_value = entry[2]['formattedValue']
    processed_rows.append({
        'Dimension': dimension,
        'AmountType': amount_category,
        'Value': amount_value
    })

# 第二步:转换为初始长表DataFrame
initial_df = pd.DataFrame(processed_rows)

# 第三步:重塑为目标宽表格式
final_df = initial_df.pivot(
    index='Dimension',
    columns='AmountType',
    values='Value'
).reset_index()

# 去掉列名的层级标签,让表格更简洁
final_df.columns.name = None

# 查看结果
print(final_df)

# 如果需要直接生成Markdown格式的表格(需先安装tabulate库:pip install tabulate)
print("\nMarkdown格式表格:")
print(final_df.to_markdown(index=False))

运行结果

执行代码后,你会得到完全匹配需求的Markdown表格:

DimensionAmount1Amount2Amount3
Dimension117,253,512.43-143,721,131.89160,974,644.32

内容的提问来源于stack exchange,提问作者Muthu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:42:47