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

Pandas DataFrame存储嵌套字典值时如何高效按行访问指定字段

解决方案

高效提取单字段(推荐)

直接使用pandas针对对象类型Series的索引访问器链式取键,是性能最优的单字段提取写法:

df['new_col'] = df['dicts'].str['Step_1'].str['Q']

该实现是pandas底层优化的向量化操作,不需要写逐行循环逻辑,执行效率比apply方案高一个数量级,数据量越大性能优势越明显。

批量展开所有嵌套字段(长期使用推荐)

如果后续需要频繁访问不同Step下的键值,更建议从根源上解决单元格存储字典的问题,用pd.json_normalize一次性把所有嵌套字典摊平为普通列,适配任意数量的Step层级:

# 展开dicts列的所有嵌套结构,嵌套键自动用.拼接为列名
flatten_cols = pd.json_normalize(df['dicts'])
# 合并回原DataFrame
df = pd.concat([df.drop(columns=['dicts']), flatten_cols], axis=1)

# 后续直接按列名访问即可,无需任何逐行操作
df['Step_1.Q']

展开后所有字段都是普通的DataFrame列,后续做筛选、聚合等操作的性能都会远高于操作单元格内的字典。


常见写法问题说明

  • 直接写df[dicts]['Step_1']['Q']报错的原因:
    df['dicts']返回的是整列Series对象,直接对Series用[]索引时,pandas会优先查找匹配的列名,不会自动逐行解包单元格内的字典做键访问,自然无法得到预期结果。
  • 自定义函数+apply的写法虽然能得到正确结果,但本质是Python层面的逐行循环,没有用到pandas的向量化优化,仅适合临时处理小数据集,大数据量下性能很差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:51:24