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

Pandas从含字典列表的嵌套结构中提取目标值的解决方法

提取目标值的解决方法

报错原因

你遇到TypeError: list indices must be integers or slices, not str的核心原因是忽略了原始数据的两层列表嵌套结构:

原始数据:[{'characters': [{'id': 'Spongebob Squarepants', 'name': 'Spongebob Squarepants'}]}]

  • 最外层是列表结构,必须先用整数索引取第0个元素,才能拿到存储characters字段的字典
  • characters字段对应的取值仍是列表结构,需要再用整数索引取第0个元素,才能拿到存储id和name的字典

原生Python直接提取方法

直接按层级访问即可拿到目标值:

# 取id字段
target = data[0]['characters'][0]['id']
# 取name字段
target = data[0]['characters'][0]['name']

DataFrame场景下的处理方案

存入DataFrame时默认把嵌套列表/字典当成单个对象存储,才会显示完整的结构字符串,两种处理方式可选:

方案1:存入前先展开数据(推荐)

提前把嵌套结构打平再存入DataFrame,后续使用更方便:

import pandas as pd

data = [{'characters': [{'id': 'Spongebob Squarepants', 'name': 'Spongebob Squarepants'}]}]
processed = []
for item in data:
    # 遍历characters列表中的所有角色
    for char in item['characters']:
        processed.append(char)

df = pd.DataFrame(processed)
# 此时df的id、name列直接存储目标值

方案2:已存入DataFrame后提取

如果数据已经存入DataFrame,对应列名为characters,可以按如下方式提取:

# 如果列存储的是字符串,先转成Python对象(eval仅可用于可信数据源)
df['characters'] = df['characters'].apply(eval)
# 提取id
df['char_id'] = df['characters'].str[0].str['id']
# 提取name
df['char_name'] = df['characters'].str[0].str['name']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:45:10