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

从嵌套列表提取值转DataFrame遇报错,求优化实现方案

问题分析与解决方案

错误原因

  1. 对象访问方式错误:报错'TeamRecord' object is not subscriptable说明你的data元素不是字典,而是TeamRecord类实例,不能用下标[]访问属性,需用点.访问(比如record.team而非record['team'])。
  2. 语法错误:get是字典方法,需用括号()调用,你写成了get['games'],正确写法为record.total.get('games');若total也是对象,直接用record.total.games即可。

修正后的基础代码

假设TeamRecord属性与原字典键名一致,修正后的循环代码如下:

import pandas as pd

df = pd.DataFrame(columns=['team', 'games', 'wins', 'losses', 'ties'])

for record in data:
    try:
        # 改用属性访问
        team = record.team
        games = record.total.games
        wins = record.total.wins
        losses = record.total.losses
        ties = record.total.ties
        
        new_row = {'team': team, 'games': games, 'wins': wins, 'losses': losses, 'ties': ties}
        df = df._append(new_row, ignore_index=True)  # pandas 2.0+推荐用_df._append,append已弃用
    
    except AttributeError as e:
        print(f"Skipping record due to missing attribute: {e}")

print(df)

更简便的实现方式

方式1:列表推导式批量生成数据

无需手动循环追加,直接生成数据列表后创建DataFrame,效率更高:

import pandas as pd

# 列表推导式提取所需字段,可按需过滤缺失属性的记录
data_list = [
    {
        'team': record.team,
        'games': record.total.games,
        'wins': record.total.wins,
        'losses': record.total.losses,
        'ties': record.total.ties
    }
    for record in data
    if hasattr(record, 'team') and hasattr(record.total, 'games')
]

df = pd.DataFrame(data_list)
print(df)

方式2:若原始数据是字典列表,用json_normalize一键处理

如果你的data原本就是字典列表(而非TeamRecord对象),用pandas内置的json_normalize可以快速展开嵌套结构:

import pandas as pd

# 展开嵌套字典并指定字段
df = pd.json_normalize(data)[['team', 'total.games', 'total.wins', 'total.losses', 'total.ties']]
# 重命名列名
df.columns = ['team', 'games', 'wins', 'losses', 'ties']
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:20:27