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

Pandas遍历DataFrame单元格内列表报float不可迭代错误如何解决

错误原因

抛出'float' object is not iterable是因为books列存在空值(NaN),pandas中空值默认存储为float类型,不是可遍历的列表,执行for循环时直接触发类型错误。
除此之外原有代码还有两个隐患:

  • 直接用字符串包含判断匹配requestor id,会出现误匹配:如果书籍的comments等其他字段恰好出现相同数字串,会返回错误条目
  • 列表内存储的书籍条目是JSON格式字符串,不是结构化字典,后续提取字段需要额外解析
正确实现步骤

1. 预处理列数据

先处理空值,同时把JSON字符串解析为字典,方便后续精准匹配:

import json
import numpy as np

def parse_books(cell):
    # 空值直接返回空列表,跳过遍历
    if isinstance(cell, float) and np.isnan(cell):
        return []
    parsed_books = []
    for book_str in cell:
        try:
            parsed_books.append(json.loads(book_str))
        except:
            # 跳过格式异常的损坏条目
            continue
    return parsed_books

df['books_parsed'] = df['books'].apply(parse_books)

2. 精准匹配目标书籍

通过字典键值对匹配requestor字段,避免字符串匹配的误判问题:

# 定义要查找的目标requestor
TARGET_ID = "27657899462"

def match_target(book_list):
    for book in book_list:
        if book.get("requestor") == TARGET_ID:
            return book
    # 无匹配项返回None
    return None

df['hipri_book'] = df['books_parsed'].apply(match_target)

如果不需要保留中间解析列,处理完成后执行df.drop(columns=['books_parsed'], inplace=True)删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:46:07