如何在Pandas或R中解析DataFrame的JSON列并展开拼接至原表
解决方法
你可以结合pandas的explode和json_normalize方法完成需求,具体实现步骤如下:
完整可运行代码
import pandas as pd import json # 1. 解析ITEMS列的JSON字符串为Python列表对象 # 注意:如果你的列名是小写items,请替换下方的ITEMS为实际列名 orders['ITEMS_parsed'] = orders['ITEMS'].apply(json.loads) # 2. 将每个订单的商品数组拆分为多行,单个商品对应一行,保留原索引用于关联订单其他字段 exploded_orders = orders.explode('ITEMS_parsed', ignore_index=False) # 3. 扁平化嵌套的JSON结构,嵌套层级会自动用点号拼接为列名 normalized_items = pd.json_normalize(exploded_orders['ITEMS_parsed']) # 4. 合并原订单的非JSON字段和扁平化后的商品字段 result_df = pd.concat( [ exploded_orders.drop(columns=['ITEMS', 'ITEMS_parsed']).reset_index(drop=True), normalized_items.reset_index(drop=True) ], axis=1 )
可选扩展:展开商品分类数组
如果需要把product.productCategories字段里的分类数组也展开为单独列/单独行,可以追加以下代码:
# 单个分类对应一行 result_df = result_df.explode('product.productCategories', ignore_index=True) # 提取分类ID为单独列 result_df['product.category_id'] = result_df['product.productCategories'].apply( lambda x: x['$oid'] if pd.notna(x) else None ) # 删除原分类数组列 result_df = result_df.drop(columns=['product.productCategories'])
原代码失效原因
你之前的写法只提取了ITEMS列的JSON内容,没有和原订单的配送地址、支付信息等字段做关联,也没有处理JSON的多层嵌套结构,因此无法得到符合预期的结果。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

