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

如何从DataFrame字典类型列中按条件提取指定键值?

Pandas提取字典列中指定值的正确方法

问题场景

现有一个包含NAME、VAL1、VAL2、COST四列的Pandas DataFrame,其中COST列的取值为字典类型,数据如下:

NAME    VAL1    VAL2     COST
----------------------------------------------------------------------------
BACD    259.35  267.00  {'COST[2]': [256.12], 'COST[5]': [257.72], 'COST[16]': [266.3]}
BACD    256.00  257.95  {'COST[2]': [255.27], 'COST[5]': [257.91], 'COST[16]': [266.3]}
BACD    257.90  262.00  {'COST[2]': [258.15], 'COST[5]': [258.82], 'COST[16]': [266.3]}
BACD    260.10  261.40  {'COST[2]': [260.32], 'COST[5]': [257.75], 'COST[16]': [266.3]}
BACD    260.45  264.90  {'COST[2]': [261.58], 'COST[5]': [258.83], 'COST[16]': [266.3]}

需求目标

提取COST列中'COST[5]'对应的值,得到如下输出:

NAME    VAL2     COST
-----------------------
BACD    267.00  257.72
BACD    257.95  257.91
BACD    262.00  258.82
BACD    261.40  257.75
BACD    264.90  258.83

错误原因

你尝试的语句无法工作,核心问题在于:

  • df.COST=='COST[5]'是把整个字典对象和字符串'COST[5]'做等值比较,完全不匹配,导致筛选结果为空
  • 没有正确提取字典中'COST[5]'对应的列表值,也未处理该值是列表的结构

正确解法

方法一:使用apply遍历提取

# 筛选NAME为BACD的行,提取基础列
result = df[df['NAME'] == 'BACD'][['NAME', 'VAL2']].copy()
# 提取COST字典中COST[5]对应的列表第一个元素
result['COST'] = df[df['NAME'] == 'BACD']['COST'].apply(lambda x: x['COST[5]'][0])
print(result)

方法二:使用Pandas字符串访问器(Pandas 0.25+支持)

# 筛选目标行并提取基础列
result = df[df['NAME'] == 'BACD'][['NAME', 'VAL2']]
# 通过str访问字典键,再提取列表第一个元素
result['COST'] = df['COST'].str['COST[5]'].str[0]
print(result)

两种方法都能输出符合需求的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:17:23