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

Python:从DataFrame字典格式列提取浮点值及代码错误排查

问题分析与解决

原始DataFrame:

Date                      comp
01-01-2022      {'dfp':25.02,'ftp':12.06}
01-02-2022      {'dfp':12.01,'ftp':40.05}
01-03-2022      {'dfp':50.20,'ftp':35.25}

需求:新增一列New,提取comp列字典中的dfp浮点值,预期输出:

Date                      comp                   New
01-01-2022      {'dfp':25.02,'ftp':12.06}       25.02
01-02-2022      {'dfp':12.01,'ftp':40.05}       12.01
01-03-2022      {'dfp':50.20,'ftp':35.25}       50.20

尝试的错误代码:

def new_col(x):
   for i in range(len(df)):
       return x[i]['dfp']

df['New'] = df['comp'].apply(new_col)

问题原因

  • apply方法会把comp列的每个单独字典元素传入new_col函数,也就是参数x本身就是单个字典(比如{'dfp':25.02,'ftp':12.06}),不是整个列的列表。你用x[i]对字典做整数索引,这不符合字典的访问规则(字典只能通过键名访问),直接触发报错。
  • 函数里的for循环完全多余,而且第一次循环就执行return,根本不会完成遍历,逻辑完全错误。

正确解法

方法1:用apply直接提取键值

最简单的方式,对每个字典直接取'dfp'键:

df['New'] = df['comp'].apply(lambda x: x['dfp'])

如果需要扩展逻辑,也可以用自定义函数:

def get_dfp(x):
    return x['dfp']

df['New'] = df['comp'].apply(get_dfp)

方法2:用str.get方法(更简洁)

Pandas的Series对象支持str.get方法直接提取字典键值,代码更短:

df['New'] = df['comp'].str.get('dfp')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:13:11