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

DataFrame逐行计算值交集报numpy.float64不可迭代TypeError

错误原因

核心触发逻辑:你逐行取到的matrix_model1、matrix_model2列的单元格值是单个数值标量(numpy.float64/int类型),不是列表、集合这类可迭代对象。set()构造函数要求传入可迭代对象,直接传入单个数值就会抛出TypeError: 'numpy.float64' object is not iterable错误。
你之前尝试用.astype('Int64')转类型没有效果,是因为转完之后单元格里依然是单个整数标量,没有变成可迭代的多元素序列,问题根源没有解决。
另外你对“交集计算”的逻辑和当前数据结构不匹配:你当前给出的样例数据每行列都是单个数字,不存在“多个元素求交集”的场景,两个单个值的交集只有两种情况:值相等时交集长度为1,值不等时交集长度为0。

修正方案

根据你的实际数据结构选对应方案即可:

方案1:单元格存单个数值(匹配你给出的样例数据结构)

不用写循环,直接用pandas矢量化运算,效率更高:

# 逐行判断两列值是否相等,相等记交集长度1,不等记0
df2['Model1_Intersection'] = (df2['matrix_model1'] == df2['matrix_model2']).astype(int)

运行后针对你给出的样例数据,输出结果如下:

matrix_model1matrix_model2Model1_Intersection
7.02.00
4.04.01
30.020.00
4.08.00

方案2:单元格存列表/集合类多元素序列

如果你的实际数据中,每个单元格存的是多个值组成的列表/集合(比如某行matrix_model1值为[2,4,7],matrix_model2值为[4,8,9]),需要先确认单元格值为可迭代类型,再用修正后的循环计算:

m = []
for i in range(len(df2)):
    set1 = set(df2['matrix_model1'].iloc[i])
    set2 = set(df2['matrix_model2'].iloc[i])
    m.append(len(set1 & set2))
df2['Model1_Intersection'] = m

内容的提问来源于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 09:54:23