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

如何访问深层嵌套JSON并转换为含多阶段DPS的Pandas DataFrame?

嵌套JSON转目标Pandas DataFrame解决方案

核心思路

分三步处理:提取各阶段DPS数据→合并多阶段数据→(可选)补充嵌套伤害数据,最终得到包含group、name、acc及三阶段DPS的DataFrame。

1. 提取各阶段DPS数据

直接从指定路径提取前10名玩家的DPS数据,转为单独的DataFrame:

import pandas as pd

# 提取三个阶段的前10名DPS数据
phase1_df = pd.DataFrame(data['phases'][1]['dpsStats'][0:10])
phase2_df = pd.DataFrame(data['phases'][6]['dpsStats'][0:10])
phase3_df = pd.DataFrame(data['phases'][12]['dpsStats'][0:10])

2. 合并多阶段数据

以玩家唯一标识acc为键,合并三个阶段的DPS数据,保留需要的字段:

# 初始化主DataFrame,保留阶段1的基础信息和DPS
merged_df = phase1_df[['group', 'name', 'acc', 'dps']].rename(columns={'dps': 'phase1_dps'})

# 合并阶段2和阶段3的DPS数据,用outer join保证所有玩家都被保留
merged_df = merged_df.merge(
    phase2_df[['acc', 'dps']].rename(columns={'dps': 'phase2_dps'}),
    on='acc',
    how='outer'
)
merged_df = merged_df.merge(
    phase3_df[['acc', 'dps']].rename(columns={'dps': 'phase3_dps'}),
    on='acc',
    how='outer'
)

# 可选:将缺失的DPS值填充为0
merged_df.fillna(0, inplace=True)

3. 补充嵌套的伤害数据(可选)

如果需要从details.dmgDistributions提取伤害数据,用json_normalize展开嵌套结构后合并:

from pandas import json_normalize

# 展开玩家的details.dmgDistributions字段,保留基础信息
player_damage = json_normalize(
    data['players'],
    record_path=['details', 'dmgDistributions'],
    meta=['group', 'acc', 'name']
)

# 合并到主DataFrame
final_df = merged_df.merge(
    player_damage[['acc', 'contributedDamage', 'totalDamage']],
    on='acc',
    how='left'
)

最终结果

处理后的DataFrame包含字段:

  • group:玩家分组
  • name:玩家名称
  • acc:玩家账号(唯一标识)
  • phase1_dps:阶段1 DPS
  • phase2_dps:阶段2 DPS
  • phase3_dps:阶段3 DPS
  • contributedDamage(可选):玩家贡献伤害
  • totalDamage(可选):对应阶段总伤害

内容的提问来源于stack exchange,提问作者Icharo-tb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:10:49