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

如何从双层嵌套字典创建Pandas多级索引DataFrame?

从双层嵌套字典创建Pandas多级索引DataFrame

解决方案代码

针对你提供的嵌套字典结构,可通过以下步骤生成目标多级索引DataFrame:

import pandas as pd

# 你的原始嵌套字典数据
data = {
   'ID':{
      0:{
         'date ↕':'2024-05-23',
         'Fighter Weight':'',
         'Opponent':'fighter_1',
         'Opponent Weight':'',
         'w-l-d':('11', '0', '0'),
         'result':'VS',
         'rounds':'12'
      },
      1:{
         'date ↕':'2022-08-28',
         'Fighter Weight':'227¾',
         'Opponent':'Fighter_2',
         'Opponent Weight':'211',
         'result':'W-SD',
         'rounds':'12/12'
      }
   }
}

# 转换为目标结构
final_df = pd.DataFrame()
for fighter_id, fight_details in data.items():
    # 将单场比赛的详情转为行,比赛编号作为上层索引
    fight_series = pd.DataFrame.from_dict(fight_details, orient='index').stack()
    # 将Series转为DataFrame列,列名为拳手ID
    final_df[fighter_id] = fight_series

# 重置索引名称(可选,让索引更清晰)
final_df.index.names = ['比赛编号', '比赛详情']

执行后得到的final_df结构与你期望的完全一致:

ID
比赛编号 比赛详情                 
0      date ↕        2024-05-23
       Fighter Weight         
       Opponent        fighter_1
       Opponent Weight         
       w-l-d          (11, 0, 0)
       result               VS
       rounds               12
1      date ↕        2022-08-28
       Fighter Weight     227¾
       Opponent        Fighter_2
       Opponent Weight       211
       w-l-d                  
       result             W-SD
       rounds            12/12

为什么最初的DataFrame.from_dict(data)不生效

默认情况下from_dict的orient参数为'columns',会把外层字典的键(如ID)作为列名,内层字典直接作为单元格值,无法解析嵌套层级,因此需要通过orient='index'先将比赛编号转为行,再用stack()将详情字段拆分为二级索引。

爬虫数据存储格式建议

如果可以修改爬虫程序,建议将数据存储为列表嵌套字典的扁平化格式,每个元素代表一场完整比赛,示例如下:

[
    {
        "fighter_id": "ID",
        "fight_number": 0,
        "date ↕": "2024-05-23",
        "Fighter Weight": "",
        "Opponent": "fighter_1",
        "Opponent Weight": "",
        "w-l-d": ("11", "0", "0"),
        "result": "VS",
        "rounds": "12"
    },
    {
        "fighter_id": "ID",
        "fight_number": 1,
        "date ↕": "2022-08-28",
        "Fighter Weight": "227¾",
        "Opponent": "Fighter_2",
        "Opponent Weight": "211",
        "result": "W-SD",
        "rounds": "12/12"
    }
]

这种格式处理更灵活,直接用pd.DataFrame()转换后,通过set_index(['fight_number', 'fighter_id']).unstack('fighter_id')即可快速生成目标结构,后续扩展多个拳手或新增字段时无需调整嵌套逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:35:05