如何将含嵌套数组的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格式
| SKU | Name | ItemSalesPrices_OEM_UnitPrice | ItemSalesPrices_OEM_AssetNumber | ItemSalesPrices_RRP_UnitPrice | ItemSalesPrices_RRP_AssetNumber |
|---|---|---|---|---|---|
| SKU1 | test name 1 | 1600 | TEST1A | 1500 | TEST1B |
| SKU2 | test name 2 | 1500 | TEST2 |
内容的提问来源于stack exchange,提问作者Duyth
相关产品推荐
相关产品推荐

