#python #pandas #numpy
Вопрос:
Тестовый пример показывает
"ValueError: Length of values (4) does not match length of index (3)"
Когда я проверил свой код, я обнаружил, что A_transformed-это массив 1X4, который должен быть матрицей 3X3.
Когда я тестирую свой код индивидуально, все хорошо до тех пор, пока
A_transformed = mean_imp.transform(pd.DataFrame(A))
Я не уверен, в чем заключается ошибка.
from sklearn.base import TransformerMixin, BaseEstimator
class MeanImputer(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
self.column_mean = []
for i in range(X.shape[1]):
if type(X) is not np.ndarray:
X_i = X.values[:, i]
else:
X_i = X[:, i]
# calculate mean for each column and add to the list `self.column_mean`
# your code here
mean = np.nanmean(X, axis = 0)
for x in mean:
self.column_mean.append(x)
return self
def transform(self, X):
#X_transformed = []
for i in range(len(self.column_mean)):
if type(X) is not np.ndarray:
X_i = X.values[:, i]
else:
X_i = X[:, i]
# Fill missing values using mean values
# your code here
inds = np.where(np.isnan(X))
X[inds] = np.take(self.column_mean, inds[1])
X_transformed = X
X_transformed = np.column_stack(X_transformed)
return X_transformed
Тестовый случай:
A = np.array([
[0, np.nan, 3],
[np.nan, 6, 7],
[np.nan, 8, np.nan],
])
mean_imp = MeanImputer()
mean_imp.fit(A)
print(mean_imp.column_mean)
assert mean_imp.column_mean == [0.0, 7.0, 5.0], "Computed mean values are incorrect."
mean_imp.fit(pd.DataFrame(A))
A_transformed = mean_imp.transform(pd.DataFrame(A))
assert ~np.isnan(A_transformed).any(), "Transformed feature matrix still contains NaNs."
assert np.allclose(A_transformed,
[[0., 7., 3.],
[0., 6., 7.],
[0., 8., 5.]]), "Filled values are incorrect."
Только код после #comment
этого-мой собственный код, остальное предоставляет система. Так что мой собственный код таков
mean = np.nanmean(X, axis = 0)
for x in mean:
self.column_mean.append(x)
inds = np.where(np.isnan(X))
X[inds] = np.take(self.column_mean, inds[1])
X_transformed = X