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

DataFrame列填充异常:无法从列表内字典提取value值并赋值,报‘float对象不可订阅’错误

解决DataFrame提取字典列表中value值的问题

嘿,我来帮你搞定这个问题!你遇到的'float' object is not subscribable错误,核心原因是你把for循环和apply函数混在一起用了,咱们来一步步拆解:

为什么你的代码会报错?

apply函数本身就会遍历df["prices"]列的每一个元素,不需要外面再套一层for循环。当第一次执行df["prices"] = df["prices"].apply(lambda i:i[0]["value"])时,prices列已经被替换成了float类型的数值(也就是提取出来的value值)。这时候循环继续迭代,i就变成了float值,再去执行i[0]自然就会报错——因为浮点数不能用下标访问呀!

正确的解决方案

直接用apply处理整个列就好,不需要额外的循环,还可以加一些判断让代码更健壮:

简洁版代码

# 提取列表中第一个字典的value,处理空列表或非列表的情况
df["prices"] = df["prices"].apply(lambda x: x[0]["value"] if isinstance(x, list) and len(x) > 0 else None)

更健壮的版本(处理异常情况)

如果你的数据里可能存在空列表、字典缺少value键等异常情况,可以写一个专门的处理函数,避免个别坏数据导致整个操作失败:

def extract_price_value(item):
    try:
        # 先判断是否是有效列表,且列表不为空
        if isinstance(item, list) and len(item) > 0:
            # 使用get方法,避免字典里没有value键时报错
            return item[0].get("value", None)
        # 不是有效列表的情况返回None
        return None
    except Exception as e:
        print(f"处理元素时出现错误: {e}")
        return None

# 应用函数到prices列
df["prices"] = df["prices"].apply(extract_price_value)

验证效果

执行完上面的代码后,df["prices"]列就会被替换成对应的value数值(比如示例中的5.2),再也不会出现浮点数下标访问的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:47:46