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

使用Pandas进行多元普通最小二乘回归时遇数据类型错误求助

问题排查与解决

你的错误提示'Pandas data cast to numpy dtype of object. Check input data with np.asarray(data)',核心原因是预测变量矩阵X里存在非数值类型的列(比如字符串、未编码的分类变量),statsmodels的OLS模型只接受数值型输入。另外代码里还有个明显的大小写错误,先一起修正:

1. 先改代码里的大小写bug

你写的X = sm.add_constant(x)里用了小写x,但前面定义的是大写X,这会直接报未定义错误,先改成:

X = sm.add_constant(X)

2. 检查并清理非数值型列

第一步:查看X中各列的数据类型

运行下面的代码,找出哪些列是object类型:

print(X.dtypes)

只要输出里有object,这些就是问题所在——比如带字符串的分类变量(像city、type这类列),OLS模型没法直接处理这类数据。

第二步:处理非数值列

  • 分类变量(字符串/枚举):用独热编码转成数值格式,直接用pandas的get_dummies方法:
    X = pd.get_dummies(X, drop_first=True)
    
  • 无意义的文本/非结构化数据:直接删掉这类列,或者通过特征工程将其转换为数值型特征(比如计数、自定义编码)。

第三步:确认目标变量Y是数值型

顺便检查下目标变量的类型:

print(Y.dtypes)

如果Y是object类型,转成数值格式:

Y = pd.to_numeric(Y, errors='coerce')

errors='coerce'会把无法转换的内容设为NaN,之后记得处理这些缺失值。

3. 修正后的完整代码示例

import statsmodels.api as sm
import pandas as pd

# 基于你的原始代码修改
cols = newdf.drop(['distance', 'duration','short_id'],axis=1)
X = cols
Y = newdf['distance']

# 处理非数值列:对object类型列做独热编码
X = pd.get_dummies(X, drop_first=True)
# 添加常数项(修正大小写错误后)
X = sm.add_constant(X)
# 拟合模型
resultmodel = sm.OLS(Y,X).fit()
print(resultmodel.summary())

额外提醒:处理缺失值

如果数据里存在缺失值,也可能触发类型转换错误,先检查并处理:

# 查看每列的缺失值数量
print(X.isnull().sum())
# 示例:用均值填充缺失值
X = X.fillna(X.mean())
Y = Y.fillna(Y.mean())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:05:52