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

如何解决sm.models中ufunc 'isfinite'输入类型不支持的错误?

解决建议

这个isfinite类型错误大概率是因为你提到的虚拟变量类型问题——factor/character类型的变量无法被数值计算函数处理,导致模型拟合时出错。给你几个具体的解决步骤:

  • 检查并转换虚拟变量类型
    先确认变量类型:用df['你的虚拟变量列名'].dtype查看,如果是object或category,直接转成整数型:

    df['虚拟变量列名'] = df['虚拟变量列名'].astype(int)
    

    如果是多分类的因子变量,建议用独热编码生成整数型虚拟变量,同时避免多重共线性:

    import pandas as pd
    # 生成独热编码,drop_first=True去掉冗余列,dtype=int确保是整数类型
    dummy_vars = pd.get_dummies(df['多分类因子列'], drop_first=True, dtype=int)
    # 合并到原数据框
    df = pd.concat([df, dummy_vars], axis=1)
    # 记得删除原因子列
    df.drop('多分类因子列', axis=1, inplace=True)
    
  • 排查其他可能的问题
    除了虚拟变量,还要检查响应变量(泊松回归的因变量)是否是整数型的计数数据,有没有混入字符串、缺失值或者非数值的异常值。可以用df['响应变量列'].describe()或df['响应变量列'].isna().sum()排查。

  • 修正手动创建虚拟变量的代码
    如果是手动用条件判断生成虚拟变量,别用字符串'1'/'0',直接用整数1/0:

    # 错误写法
    df['dummy'] = np.where(df['特征列'] == '某类别', '1', '0')
    # 正确写法
    df['dummy'] = np.where(df['特征列'] == '某类别', 1, 0)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:07:38