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

Pandas计算两列交集触发TypeError: 'float' object is not iterable

报错根因
  • 直接触发点:Topic1_assignment、Topic2_assignment两列存在缺失值,Pandas默认用float类型的np.nan标记缺失值,列表推导遍历行时,float类型的np.nan被传入set()构造函数。set()仅接受可迭代对象入参,float值不可迭代,直接抛出TypeError。
  • 隐藏问题:就算处理完缺失值,如果两列存的是字符串格式的列表内容(比如"[1,3,5]"这类文本),直接传入set()会把字符串逐字符拆成集合元素,算出来的交集长度完全错误。
修正方案

先做列预处理:补全缺失值,把字符串格式的序列结构转成真实的Python集合,再计算交集长度。

import pandas as pd
import ast

def parse_col(val):
    # 缺失值返回空集合
    if pd.isna(val):
        return set()
    # 字符串格式的列表/元组先转成原生Python结构,再转集合
    if isinstance(val, str):
        return set(ast.literal_eval(val))
    # 原生可迭代结构直接转集合
    return set(val)

df9['C'] = df9.apply(
    lambda x: len(parse_col(x.Topic1_assignment) & parse_col(x.Topic2_assignment)),
    axis=1
)

如果确认两列存储的都是原生列表/元组,没有字符串格式的内容,可以简化写法,只做空值兼容即可:

import pandas as pd

df9['C'] = [
    len(set([] if pd.isna(a) else a) & set([] if pd.isna(b) else b))
    for a, b in zip(df9.Topic1_assignment, df9.Topic2_assignment)
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:36:27