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

如何将含嵌套数组的JSON展平为带前缀列的DataFrame并导出CSV

解决方案

可以通过pandas的json_normalize结合**透视表(pivot)**实现需求,具体步骤如下:

1. 准备数据与导入依赖

import pandas as pd

# 原始数据(直接使用Python字典列表格式)
data = [
    {'SKU':'SKU1','name':'test name 1',
     'ItemSalesPrices':[{'SourceNumber': 'OEM', 'AssetNumber': 'TEST1A', 'UnitPrice': 1600}, 
                        {'SourceNumber': 'RRP', 'AssetNumber': 'TEST1B', 'UnitPrice': 1500}]},
    {'SKU':'SKU2','name':'test name 2',
     'ItemSalesPrices':[{'SourceNumber': 'RRP', 'AssetNumber': 'TEST2', 'UnitPrice': 1500}]}
]

2. 展平嵌套数组并透视重组

# 展平ItemSalesPrices字段,保留SKU和name作为标识列
df_normalized = pd.json_normalize(data, record_path='ItemSalesPrices', meta=['SKU', 'name'])

# 透视数据:将SourceNumber转为列前缀,AssetNumber和UnitPrice作为值列
df_pivoted = df_normalized.pivot(
    index=['SKU', 'name'],
    columns='SourceNumber',
    values=['AssetNumber', 'UnitPrice']
)

# 合并层级列名,生成目标格式的列名
df_pivoted.columns = [f'ItemSalesPrices_{col[1]}_{col[0]}' for col in df_pivoted.columns]

# 重置索引,恢复SKU和name为普通列并重命名name为Name
df_final = df_pivoted.reset_index().rename(columns={'name': 'Name'})

3. 调整格式并保存为CSV

# 按目标顺序排列列,并将空值替换为空字符串
target_columns = [
    'SKU', 'Name',
    'ItemSalesPrices_OEM_UnitPrice', 'ItemSalesPrices_OEM_AssetNumber',
    'ItemSalesPrices_RRP_UnitPrice', 'ItemSalesPrices_RRP_AssetNumber'
]
df_final = df_final[target_columns].fillna('')

# 保存为CSV文件
df_final.to_csv('flattened_data.csv', index=False)

最终生成的DataFrame格式

SKUNameItemSalesPrices_OEM_UnitPriceItemSalesPrices_OEM_AssetNumberItemSalesPrices_RRP_UnitPriceItemSalesPrices_RRP_AssetNumber
SKU1test name 11600TEST1A1500TEST1B
SKU2test name 21500TEST2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:32