如何解决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
相关产品推荐
相关产品推荐

