Python 构建多元回归模型时抛出错误:`Pandas数据强制转换为对象的numpy数据类型。使用np.asarray(数据)检查输入数据`

Python 构建多元回归模型时抛出错误:`Pandas数据强制转换为对象的numpy数据类型。使用np.asarray(数据)检查输入数据`,python,numpy,pandas,statsmodels,Python,Numpy,Pandas,Statsmodels,我有一个数据框架,其中一些分类预测值(即变量)为0和1,还有一些数值变量。当我将其安装到stasmodel时,如: est = sm.OLS(y, X).fit() 它抛出: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data). 我使用df.convert\u对象(convert\u numeric=True) 在此之后,所有数据帧变量的数据类型显示为int32或int64。但最

我有一个数据框架,其中一些分类预测值(即变量)为0和1,还有一些数值变量。当我将其安装到stasmodel时,如:

est = sm.OLS(y, X).fit()
它抛出:

Pandas data cast to numpy dtype of object. Check input data with np.asarray(data). 
我使用
df.convert\u对象(convert\u numeric=True)

在此之后,所有数据帧变量的数据类型显示为int32或int64。但最后它仍然显示
dtype:object
,如下所示:

4516        int32
4523        int32
4525        int32
4531        int32
4533        int32
4542        int32
4562        int32
sex         int64
race        int64
dispstd     int64
age_days    int64
dtype: object
这里的4516、4523是可变标签


有什么想法吗?我需要在数百个变量上建立一个多元回归模型。为此,我连接了3个熊猫数据帧,以得到用于模型构建的最终数据帧

如果X是您的数据帧,请尝试在运行模型时使用
.astype
方法将其转换为float:

est = sm.OLS(y, X.astype(float)).fit()
如果y(从属)和X均取自数据帧,则键入cast(强制转换):-

est = sm.OLS(y.astype(float), X.astype(float)).fit()

这是因为您尚未生成所有预测值的伪值步骤,因此如何在文字上进行回归?这就是错误消息所说的,它正试图转换为numpy有效条目


只需回到您的管道并正确地包含虚拟变量。

正如Mário和Daniel所建议的,是的,问题是由于以前没有将分类值转换为虚拟变量

我遇到了这个问题,正在审查来自statsmodels的“Carseats”数据集的线性回归实验室,其中列“ShelveLoc”、“US”和“Urban”是分类值,我假设在您的数据集中引起问题的分类值也是与此类似的字符串。考虑到前面的问题,我将以此为例,因为您没有为问题提供数据帧。

如“ShelveLoc”、“US”和“Urban”之前所述,我们在开头的专栏如下:

Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
       'ShelveLoc', 'Age', 'Education', 'Urban', 'US'],
      dtype='object')
在Python的一行简单代码中,我将它们转换为分类值,并删除了带有“No”和“Bad”标签的值(因为这是本书中向实验室提出的要求)

这将返回包含以下列的数据帧:

Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
       'Age', 'Education', 'ShelveLoc_Good', 'ShelveLoc_Medium', 'US_Yes',
       'Urban_Yes'],
      dtype='object')

就是这样,你已经为OLS准备好了虚拟变量。希望这是有用的。

您看到的输出与预期一致。输出末尾列出的数据类型是数据类型系列的数据类型(调用pd.DataFrame.dtypes的结果),与数据帧中的类型无关。只需尝试
pd.DataFrame(范围(100)).dtypes
check
np.asarray(X).dtype
哪个应该是float64,或者int64,我认为它将在statsmodels内转换为float64。最好再次检查
est.model.exog.dtype
,以确保在计算中使用float64.so。。将分类变量转换为浮点数?所以。。将分类变量转换为浮点数?在将所有分类变量粘贴到模型中之前,应将其转换为虚拟变量,因此是的
Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
       'Age', 'Education', 'ShelveLoc_Good', 'ShelveLoc_Medium', 'US_Yes',
       'Urban_Yes'],
      dtype='object')