如何在Pandas中拆分Shopify订单数据的字典列表为多行多列
拆分DataFrame中嵌套字典列表的字段(Shopify Order API数据处理)
原始数据
你的Shopify Order API返回数据整理后的简化DataFrame如下:
| order_id | name | item_order |
|---|---|---|
| 123 | Jon Doe | [{'id':789,'price':40.0,'sku':'HAT'},{'id':790,'price':41.0,'sku':'SHIRT'}] |
| 122 | Jonah Doe | [{'id':553,'price':20.0,'sku':'CAP'}] |
处理步骤
直接用Pandas就能完成拆分,步骤如下:
- 构造/加载原始数据(模拟你的数据)
import pandas as pd data = { 'order_id': ['123', '122', ''], 'name': ['Jon Doe', 'Jonah Doe', ''], 'item_order': [ [{'id':789,'price':40.0,'sku':'HAT'},{'id':790,'price':41.0,'sku':'SHIRT'}], [{'id':553,'price':20.0,'sku':'CAP'}], [] ] } df = pd.DataFrame(data)
- 过滤空行
先把无有效订单ID的空记录去掉:
df = df[df['order_id'].str.strip() != ''].reset_index(drop=True)
- 拆分商品列表
用explode把每个订单里的商品字典拆成单独一行:
df_exploded = df.explode('item_order', ignore_index=True)
- 展开字典为列
用json_normalize把字典格式的商品信息展开成单独列,同时给列名加上item_order.前缀:
from pandas import json_normalize df_items = json_normalize(df_exploded['item_order']).add_prefix('item_order.')
- 合并数据
把原数据(去掉item_order列)和展开后的商品列合并:
final_df = pd.concat([df_exploded.drop('item_order', axis=1), df_items], axis=1)
最终结果
处理后得到的DataFrame格式如下:
| order_id | name | item_order.id | item_order.price | item_order.sku |
|---|---|---|---|---|
| 123 | Jon Doe | 789 | 40.0 | HAT |
| 123 | Jon Doe | 790 | 41.0 | SHIRT |
| 122 | Jonah Doe | 553 | 20.0 | CAP |
注意事项
如果你的item_order字段是字符串格式(不是已解析的列表字典),需要先转成Python对象:
import ast df['item_order'] = df['item_order'].apply(lambda x: ast.literal_eval(x) if x.strip() != '' else [])
内容的提问来源于stack exchange,提问作者user15368200
相关产品推荐
相关产品推荐

