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

如何将给定JSON数组转换为指定格式的Python DataFrame

Python 实现JSON转目标DataFrame教程

前置依赖

需要用到以下库,其中pandas需提前安装,其余为Python内置库:

  • pandas
  • ast
  • json
  • html

完整实现代码

写法1:遍历实现(逻辑直观易理解)

import pandas as pd
import ast
import html
import json

# 1. 读取原始JSON文件(注意原始JSON使用单引号,不符合标准JSON规范,用ast.literal_eval解析更稳妥)
with open("你的JSON文件路径.json", "r", encoding="utf-8") as f:
    raw_data = ast.literal_eval(f.read())

# 2. 转换为初始DataFrame
df_raw = pd.DataFrame(raw_data)

# 3. 处理转义的shippingBook字段,拆分多值列表为单行记录
result_list = []
for _, row in df_raw.iterrows():
    # 还原HTML转义字符,解析shippingBook为列表
    shipping_list = json.loads(html.unescape(row["shippingBook"]))
    for shipping_item in shipping_list:
        # 遍历每个bookNo,单独生成一条记录
        for book_no in shipping_item["bookNoList"]:
            result_list.append({
                "orderId": row["orderId"],
                "deliveryId": row["deliveryId"],
                "courseCode": shipping_item["courseCode"],
                "qtyOrdered": shipping_item["qtyOrdered"],
                "bookNo": book_no
            })

# 4. 生成最终DataFrame
df_final = pd.DataFrame(result_list)

# 输出验证
print(df_final)

写法2:pandas原生方法实现(无循环,效率更高)

import pandas as pd
import ast
import html
import json

# 读取并解析原始JSON
with open("你的JSON文件路径.json", "r", encoding="utf-8") as f:
    raw_data = ast.literal_eval(f.read())
df_raw = pd.DataFrame(raw_data)

# 解析转义的shippingBook字段为列表
df_raw["shippingBook"] = df_raw["shippingBook"].apply(lambda x: json.loads(html.unescape(x)))
# 第一次展开:拆分shippingBook列表为单行
df_explode = df_raw.explode("shippingBook", ignore_index=True)
# 提取shippingBook内的结构化字段
df_explode[["courseCode", "qtyOrdered", "bookNoList"]] = df_explode["shippingBook"].apply(pd.Series)
# 第二次展开:拆分图书编号列表为单行,得到最终结果
df_final = df_explode.explode("bookNoList", ignore_index=True)\
                     .rename(columns={"bookNoList": "bookNo"})\
                     .drop(columns=["shippingBook"])

# 输出验证
print(df_final)

关键步骤说明

  • 原始JSON使用单引号包裹键值,不符合标准JSON语法,因此用ast.literal_eval替代json.loads解析,避免报错
  • shippingBook字段存储的是HTML转义后的JSON字符串,需要先用html.unescape还原转义字符(如把"转回双引号),再解析为列表对象
  • 最终通过列表拆分得到每个图书编号单独占一行的结构化DataFrame,包含订单ID、配送ID、课程编码、订购数量、图书编号五个核心字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:04