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

解决TypeError:字符串与浮点数无法比较的余弦相似度列计算问题

错误原因分析

报错核心是类型不兼容:df[cos_cols].idxmax(axis=1)返回的是列名字符串(比如articleScores1),你直接拿它和浮点数0.5做比较,自然触发TypeError。同时你的n_lar函数逻辑完全错误:apply是逐行处理单条数据,但你在函数里直接操作整个DataFrame,且没有正确返回值。

解决方法

推荐用向量化操作实现需求(比apply高效数倍,适合大数据集):

import numpy as np

# 定义相似度列列表
cos_cols = [f"articleScores{i}" for i in range(1, 6)]

# 计算每行的最大相似度数值、对应列名
max_sim_values = df[cos_cols].max(axis=1)
max_sim_cols = df[cos_cols].idxmax(axis=1)

# 生成目标列:按规则赋值
df['Most_similar_to'] = np.where(
    max_sim_values >= 0.5,
    max_sim_cols.str.replace('articleScores', 'CosineSim'),
    False
)

代码解释

  • max_sim_values:提取每行5个相似度列中的最大值(数值类型,可直接和0.5比较)
  • max_sim_cols:获取每行最大值对应的列名(如articleScores3)
  • np.where:批量判断赋值:
    • 当最大值≥0.5时,把列名中的articleScores替换为CosineSim,得到要求的CosineSimX格式
    • 否则返回False

如果一定要用apply(不推荐,小数据集可用),需修改为逐行处理逻辑:

cos_cols = [f"articleScores{i}" for i in range(1, 6)]

def get_most_similar(row):
    sim_vals = row[cos_cols]
    max_val = sim_vals.max()
    if max_val >= 0.5:
        target_col = sim_vals.idxmax()
        return target_col.replace('articleScores', 'CosineSim')
    return False

df['Most_similar_to'] = df.apply(get_most_similar, axis=1)

内容的提问来源于stack exchange,提问作者Python-data

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:20:37