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

如何用pandas将Shopify返回的JSON转换为无嵌套子字段的完整表格

解决方案

你只需要把直接构造DataFrame的逻辑替换为pd.json_normalize()处理即可,这个函数会自动将嵌套的JSON字段展开为扁平的二维列,列名默认用「父字段.子字段」的格式命名,不会丢失任何层级的信息。


修改后的完整代码

import pandas as pd
import numpy as np
import re
import requests

def get_all_orders():
    last = 0
    orders = pd.DataFrame()
    while True:
        url = f"https://{apikey}:{password}@{hostname}/admin/api/{version}/{resource}.json?limit=250&fulfillment_status=unfulfilled&since_id={last}"
        response = requests.request("GET", url)
        # 替换原来的pd.DataFrame,用json_normalize处理嵌套结构
        df = pd.json_normalize(response.json()['orders'])
        orders = pd.concat([orders, df], ignore_index=True)
        if len(df) < 250:
            break
        last = df['id'].iloc[-1]
    return orders

df = get_all_orders()

可选自定义调整参数

如果需要调整展开规则,可以给pd.json_normalize添加以下常用参数:

  • sep:修改父字段和子字段的连接符,比如sep='_'就会把customer.email改成customer_email
  • max_level:限制展开的最大层级,比如只展开到第二层就填max_level=2
  • 如果存在列表类型的嵌套字段(比如一个订单对应多个商品的line_items),需要单独展开的话可以指定record_path参数,示例如下:
# 单独展开订单中的商品明细,同时保留订单id作为关联键
line_items_df = pd.json_normalize(
    response.json()['orders'],
    record_path = 'line_items',
    meta = ['id'], # 保留订单id关联
    meta_prefix = 'order_' # 给关联字段加前缀避免重名
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:27:03