如何用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:
| Name | 2022-09 Qty | 2022-09 Amount | 2022-09 Cost | 2022-08 Qty | 2022-08 Amount | 2022-08 Cost |
|---|---|---|---|---|---|---|
| ItemA | 0 | 0 | 0 | 0 | 0 | 0 |
| ItemB | 5.0 | 10 | 5 | 2.0 | 8 | 4 |
解决方案
使用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)
代码解释
pd.json_normalize(data):将多层嵌套字典展开为以顶层键(ItemA/ItemB)为索引、扁平化列名为表头的DataFrame。.T:转置DataFrame,让顶层Item变为行数据,原来的统计项列转为行索引。reset_index():将行索引转为普通列,后续重命名为Name。- 列名调整:把默认的点分隔格式(如
2022-09.Qty)替换为目标的空格分隔格式。
运行后即可得到符合要求的DataFrame结构。
内容的提问来源于stack exchange,提问作者ddd
相关产品推荐
相关产品推荐

