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

如何用Python将嵌套字典转换为指定格式的Pandas DataFrame?

嵌套字典转指定结构Pandas DataFrame解决方案

问题说明

给定如下嵌套字典(注:原字典存在语法错误,已修正为合法格式):

data = {
    'ItemA': {
        '2022-09': {'Qty': 0, 'Amount': 0, 'Cost': 0},
        '2022-08': {'Qty': 0, 'Amount': 0, 'Cost': 0}
    },
    'ItemB': {
        '2022-09': {'Qty': 5.0, 'Amount': 10, 'Cost': 5},
        '2022-08': {'Qty': 2.0, 'Amount': 8, 'Cost': 4}
    }
}

需要转换为如下结构的DataFrame:

Name2022-09 Qty2022-09 Amount2022-09 Cost2022-08 Qty2022-08 Amount2022-08 Cost
ItemA000000
ItemB5.01052.084

解决方案

使用pd.json_normalize可以高效处理嵌套字典的扁平化,再通过简单的列名调整和索引重置得到目标结构:

import pandas as pd

# 修正后的原始数据
data = {
    'ItemA': {
        '2022-09': {'Qty': 0, 'Amount': 0, 'Cost': 0},
        '2022-08': {'Qty': 0, 'Amount': 0, 'Cost': 0}
    },
    'ItemB': {
        '2022-09': {'Qty': 5.0, 'Amount': 10, 'Cost': 5},
        '2022-08': {'Qty': 2.0, 'Amount': 8, 'Cost': 4}
    }
}

# 展开嵌套字典并转置,将顶层Item转为列
df = pd.json_normalize(data).T.reset_index()
# 自动调整列名格式,把默认的点分隔替换为空格
df.columns = ['Name'] + [col.replace('.', ' ') for col in pd.json_normalize(data).columns]

print(df)

代码解释

  1. pd.json_normalize(data):将多层嵌套字典展开为以顶层键(ItemA/ItemB)为索引、扁平化列名为表头的DataFrame。
  2. .T:转置DataFrame,让顶层Item变为行数据,原来的统计项列转为行索引。
  3. reset_index():将行索引转为普通列,后续重命名为Name。
  4. 列名调整:把默认的点分隔格式(如2022-09.Qty)替换为目标的空格分隔格式。

运行后即可得到符合要求的DataFrame结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52