如何将给定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
相关产品推荐
相关产品推荐

