scikit 学习 LinearRegression IndexError

scikit-learn LinearRegression IndexError

我正在研究 线性回归 模型来填充特征 Rupeepersqft 的空值。当我 运行 代码时,我收到此错误:

IndexError                                Traceback (most recent call last)
<ipython-input-20-33d4e6d2998e> in <module>()
      1 test_data = data_with_null.iloc[:,:3]
----> 2 Rupeepersqft_predicted['Rupeepersqft'] = pd.DataFrame(linreg.predict(test_data))

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

这是给我错误的代码:

from sklearn.linear_model import LinearRegression
linreg = LinearRegression()

data_with_null = data2[['Price (Lakhs)','Area','Area Type','Rupeepersqft','Condition','Purchase Type','Real Estate Regulation Act']].dropna()
data_without_null =  data_with_null.dropna()

train_data_x = data_without_null.iloc[:,:3]
train_data_y = data_without_null.iloc[:,3]

linreg.fit(train_data_x, train_data_y)

test_data = data_with_null.iloc[:,:3]
Rupeepersqft_predicted['Rupeepersqft'] = pd.DataFrame(linreg.predict(test_data))

data_with_null.Rupeepersqft.fillna(Rupeepersqft_predicted, inplace=True)

数据是这样的:

谁能帮我解决这个问题?

要为 Pandas.DataFrame 中的列赋值,您应该使用 locators,即 lociloc(用于类似数组的操作),以便解决您的问题尝试更改

Rupeepersqft_predicted['Rupeepersqft'] = pd.DataFrame(linreg.predict(test_data))

至:

Rupeepersqft_predicted.loc[:, 'Rupeepersqft'] = pd.DataFrame(linreg.predict(test_data))

这将选择所有行 (:) 和列 Rupeepersqft,并分配您在右侧的任何值。

或使用 iloc:

Rupeepersqft_predicted.iloc[:, 1] = pd.DataFrame(linreg.predict(test_data))

将其分配给 DataFrame.

的第 1 列的所有行(再次通过 : 运算符)

只需确保右侧的值与您尝试为其分配的列的长度相同。

有关 Pandas 的更多信息,您可以在 this book 中找到。

干杯