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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:03