为何在statsmodels的Logistic回归中引入不同数据类型会报错?
问题分析与解决
问题原因
当DataFrame中同时包含布尔型(bool)和浮点型(float)列时,pandas会自动将整个DataFrame的 dtype 转为 object,而statsmodels的Logit模型要求输入数据为数值型数组(如float或int),无法直接处理object类型的数据,因此触发类型转换错误。
解决方案
将布尔型列转换为整数型或浮点型即可解决问题,具体有两种常见方式:
方式1:单独转换布尔列
在构建模型前,把DataFrame中的布尔列转为int(True→1,False→0):
import pandas as pd import statsmodels.api as sm X = pd.DataFrame([[True, 12.3], [False, 14.2], [True, 18.0]]) # 将布尔列(第0列)转为整数型 X[0] = X[0].astype(int) y = pd.Series([0, 1, 0]) log_reg = sm.Logit(y, X).fit() log_reg.summary()
方式2:整体转换DataFrame为浮点型
直接将整个DataFrame转为float类型,布尔值会自动转为1.0和0.0:
import pandas as pd import statsmodels.api as sm X = pd.DataFrame([[True, 12.3], [False, 14.2], [True, 18.0]]) # 整体转为浮点型 X = X.astype(float) y = pd.Series([0, 1, 0]) log_reg = sm.Logit(y, X).fit() log_reg.summary()
验证效果
修改后两种方式都能正常拟合逻辑回归模型并输出摘要信息,不会再触发ValueError。
内容的提问来源于stack exchange,提问作者RogerKint
相关产品推荐
相关产品推荐

