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
相关产品推荐
相关产品推荐

