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

Python脚本报错:无法在数组中找到索引,求问题根源

问题根源分析与解决方案

首先咱们来拆解这个「无法在数组中找到索引」错误的核心原因:
你用train_test_split拆分数据集后,X_train作为DataFrame,它的索引会保留原数据集的索引值,并不是从0开始的连续整数序列。但你的循环里用了for n in range(0, len(Y_train)),也就是用0、1、2...这类连续数字去取X_train["surface"][n],当这个n不在X_train的实际索引集合里时,自然就会触发索引找不到的错误。

举个直观的例子:假设原数据集的索引是[2,5,7,10,...],拆分后的X_train索引还是这些零散的值,当循环到n=0时,X_train里根本没有0这个索引,程序直接报错。

解决方法

方法1:重置X_train和Y_train的索引

在拆分数据集后,给X_train和Y_train重置索引,让它们从0开始连续编号:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
# 重置索引,drop=True避免把原索引转为新列
X_train = X_train.reset_index(drop=True)
Y_train = Y_train.reset_index(drop=True)

# 后续代码保持不变
est = sm.OLS(Y_train, X_train).fit()
coefSurface = est.params["surface"]
coefArrondissement = est.params["arrondissement"]
...

这样循环里的n就能和X_train的索引完美对应,不会再出现索引不匹配的问题。

方法2:改用更高效的向量运算(推荐)

Pandas和Statsmodels本身就支持向量式运算,完全没必要写循环——这种方式既高效,又从根源上规避了索引问题:

# 直接通过列运算计算预测价格
predicted_prices = coefSurface * X_train["surface"] + coefArrondissement * X_train["arrondissement"]
# 想查看结果的话,直接打印整个Series即可
print(predicted_prices)

这是Pandas的惯用写法,比循环执行速度快得多,也更符合数据分析的代码风格。

另外提个小建议:你代码里的indices和indices2看起来是想过滤值为"whatever"的行,如果这类无效数据存在,建议在拆分数据集前就完成数据清洗,不然带着无效特征训练模型,会直接影响模型的拟合效果哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:32