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

使用scikit-learn LinearRegression填充空值触发IndexError如何解决

报错原因
  • 直接触发原因:Rupeepersqft_predicted 变量未提前初始化定义,你直接对不存在的对象执行['Rupeepersqft']索引赋值操作,不符合Python对象索引规则,触发本次IndexError。
  • 代码逻辑错误1:你定义data_with_null时就调用了.dropna()方法,直接删除了所有带空值的行,后续填充空值的操作没有可生效的目标,完全失去了用模型补全空值的意义。
  • 代码逻辑错误2:你后续fillna方法传入的是DataFrame对象,而目标是Rupeepersqft这个Series列,参数类型不匹配,即使解决当前报错后续也会触发新的错误。
修复方案

修改后可正常运行的完整代码如下:

from sklearn.linear_model import LinearRegression
linreg = LinearRegression()

# 先复制全量目标字段数据,不提前删除空值
all_data = data2[['Price (Lakhs)','Area','Area Type','Rupeepersqft','Condition','Purchase Type','Real Estate Regulation Act']].copy()
# 提取Rupeepersqft无缺失值的部分作为训练集
train_data = all_data.dropna(subset=['Rupeepersqft'])
train_x = train_data.iloc[:,:3]
train_y = train_data.iloc[:,3]

# 训练模型
linreg.fit(train_x, train_y)

# 提取需要预测的样本:仅Rupeepersqft为空的样本的前3列特征
test_data = all_data[all_data['Rupeepersqft'].isna()].iloc[:,:3]
# 生成预测值
predicted_values = linreg.predict(test_data)

# 直接把预测值回填到原数据集的空值位置
all_data.loc[all_data['Rupeepersqft'].isna(), 'Rupeepersqft'] = predicted_values

修改说明:

  • 取消了错误的提前删空操作,先保留全量数据,单独提取无空值子集作为训练集
  • 无需提前定义Rupeepersqft_predicted变量,直接生成预测值后用loc索引回填到原数据空值位置,规避索引错误
  • 仅对Rupeepersqft为空的样本做预测,既减少不必要计算,也避免覆盖原有有效值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:08