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

执行Mann-Whitney U检验时触发TypeError:isnan不支持输入类型

Mann-Whitney U检验报错"ufunc 'isnan' not supported..."的原因及解决办法

核心原因

报错本质是传入mannwhitneyu的数据不是数值类型——即便已经清理了NaN,scipy底层的isnan函数无法处理非数值(比如字符串、object类型)的数据,因此抛出TypeError。

具体排查与解决步骤

  • 检查数据类型
    先确认两个数据框目标列的类型:

    print(primary_tumor_df.dtypes)
    print(healthy_tissue_df.dtypes)
    

    如果输出为object,说明列中可能混有字符串(比如带逗号的数字、非数值字符),或是数字被错误识别为字符串类型。

  • 转换为数值类型
    使用pd.to_numeric强制转换目标列,同时处理转换失败的情况:

    primary_tumor_df['target_col'] = pd.to_numeric(primary_tumor_df['target_col'], errors='coerce')
    healthy_tissue_df['target_col'] = pd.to_numeric(healthy_tissue_df['target_col'], errors='coerce')
    # 清理转换产生的新NaN
    primary_tumor_df.dropna(subset=['target_col'], inplace=True)
    healthy_tissue_df.dropna(subset=['target_col'], inplace=True)
    
  • 确保输入是一维数组
    传入mannwhitneyu的必须是一维数据(而非整个数据框),比如检验某列gene_expression:

    from scipy.stats import mannwhitneyu
    stat, p = mannwhitneyu(primary_tumor_df['gene_expression'], healthy_tissue_df['gene_expression'])
    
  • 排查特殊非数值类型
    部分数据看似数值,实际是布尔值、空字符串等特殊类型,可通过以下代码排查:

    # 查看目标列首个元素的类型
    print(type(primary_tumor_df['target_col'].iloc[0]))
    # 筛选无法转为数值的行
    non_numeric_rows = primary_tumor_df[pd.to_numeric(primary_tumor_df['target_col'], errors='coerce').isna()]
    print(non_numeric_rows)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:42:03