@@ -1223,10 +1223,8 @@ def fit(self, X: pd.DataFrame, y=None):
12231223 Returns self.
12241224 """
12251225 super ().fit (X )
1226- df = self ._check_input (X )
12271226 hyperparameters = self .get_hyperparams ()
12281227 self .imputer_ = KNNImputer (metric = "nan_euclidean" , ** hyperparameters )
1229- self .imputer_ .fit (df )
12301228 return self
12311229
12321230 def _transform_element (self , df : pd .DataFrame , col : str = "__all__" ) -> pd .DataFrame :
@@ -1252,7 +1250,7 @@ def _transform_element(self, df: pd.DataFrame, col: str = "__all__") -> pd.DataF
12521250 Input has to be a pandas.DataFrame.
12531251 """
12541252 self ._check_dataframe (df )
1255- results = self .imputer_ .transform (df )
1253+ results = self .imputer_ .fit_transform (df )
12561254 return pd .DataFrame (data = results , columns = df .columns , index = df .index )
12571255
12581256
@@ -1329,10 +1327,10 @@ def fit(self, X: pd.DataFrame, y=None):
13291327 """
13301328 hyperparams = self .get_hyperparams ()
13311329 super ().fit (X )
1332- df = self ._check_input (X )
13331330 self .imputer_ = IterativeImputer (estimator = self .estimator , ** hyperparams )
1334- self .imputer_ .fit (df )
1335- self .n_iter_ = self .imputer_ .n_iter_
1331+ self .n_iter_ = 1
1332+ # requires fitting IterativeImputer in the fit method
1333+ # self.n_iter_ = self.imputer_.n_iter_
13361334 return self
13371335
13381336 def _transform_element (self , df : pd .DataFrame , col : str = "__all__" ) -> pd .DataFrame :
@@ -1358,12 +1356,10 @@ def _transform_element(self, df: pd.DataFrame, col: str = "__all__") -> pd.DataF
13581356 Input has to be a pandas.DataFrame.
13591357 """
13601358 self ._check_dataframe (df )
1361- res = self .imputer_ .transform (df )
1362- imputed = pd .DataFrame (columns = df .columns )
1363- for ind , col in enumerate (imputed .columns ):
1364- imputed [col ] = res [:, ind ]
1365- imputed .index = df .index
1366- return imputed
1359+ X_imputed = self .imputer_ .fit_transform (df )
1360+ df_imputed = pd .DataFrame (X_imputed , index = df .index , columns = df .columns )
1361+
1362+ return df_imputed
13671363
13681364
13691365class ImputerRegressor (_Imputer ):
@@ -1727,47 +1723,47 @@ def get_model(self, **hyperparams) -> em_sampler.EM:
17271723 " Valid values are `multinormal`and `VAR`."
17281724 )
17291725
1730- def fit (self , X : pd .DataFrame , y = None ):
1731- """Fit the imputer on X.
1732-
1733- Parameters
1734- ----------
1735- X : pd.DataFrame
1736- Data matrix on which the Imputer must be fitted.
1737-
1738- Returns
1739- -------
1740- self : Self
1741- Returns self.
1742- """
1743- super ().fit (X )
1744- df = self ._check_input (X )
1745-
1746- # n_rows, n_cols = df.shape
1747- # if n_rows == 1:
1748- # raise ValueError("n_samples=1 is not allowed!")
1749-
1750- if self .model not in ["multinormal" , "VAR1" ]:
1751- raise ValueError (
1752- f"Model argument `{ self .model } ` is invalid!"
1753- " Valid values are `multinormal`and `VAR`."
1754- )
1755-
1756- cols_with_nans = df .columns [df .isna ().any ()]
1757-
1758- self ._models = {}
1759- if self .columnwise :
1760- for col in cols_with_nans :
1761- hyperparams = self .get_hyperparams (col = col )
1762- model = self .get_model (** hyperparams )
1763- model .fit (df [col ].values )
1764- self ._models [col ] = model
1765- else :
1766- hyperparams = self .get_hyperparams ()
1767- model = self .get_model (** hyperparams )
1768- model .fit (df .values .T )
1769- self ._models ["__all__" ] = model
1770- return self
1726+ # def fit(self, X: pd.DataFrame, y=None):
1727+ # """Fit the imputer on X.
1728+
1729+ # Parameters
1730+ # ----------
1731+ # X : pd.DataFrame
1732+ # Data matrix on which the Imputer must be fitted.
1733+
1734+ # Returns
1735+ # -------
1736+ # self : Self
1737+ # Returns self.
1738+ # """
1739+ # super().fit(X)
1740+ # df = self._check_input(X)
1741+
1742+ # # n_rows, n_cols = df.shape
1743+ # # if n_rows == 1:
1744+ # # raise ValueError("n_samples=1 is not allowed!")
1745+
1746+ # if self.model not in ["multinormal", "VAR1"]:
1747+ # raise ValueError(
1748+ # f"Model argument `{self.model}` is invalid!"
1749+ # " Valid values are `multinormal`and `VAR`."
1750+ # )
1751+
1752+ # cols_with_nans = df.columns[df.isna().any()]
1753+
1754+ # self._models = {}
1755+ # if self.columnwise:
1756+ # for col in cols_with_nans:
1757+ # hyperparams = self.get_hyperparams(col=col)
1758+ # model = self.get_model(**hyperparams)
1759+ # model.fit(df[col].values)
1760+ # self._models[col] = model
1761+ # else:
1762+ # hyperparams = self.get_hyperparams()
1763+ # model = self.get_model(**hyperparams)
1764+ # model.fit(df.values.T)
1765+ # self._models["__all__"] = model
1766+ # return self
17711767
17721768 def _transform_element (self , df : pd .DataFrame , col : str = "__all__" ) -> pd .DataFrame :
17731769 """
@@ -1792,7 +1788,13 @@ def _transform_element(self, df: pd.DataFrame, col: str = "__all__") -> pd.DataF
17921788 Input has to be a pandas.DataFrame.
17931789 """
17941790 self ._check_dataframe (df )
1795- model = self ._models [col ]
1791+
1792+ hyperparams = self .get_hyperparams (col = col )
1793+ model = self .get_model (** hyperparams )
1794+ if col == "__all__" :
1795+ model .fit (df .values .T )
1796+ else :
1797+ model .fit (df [col ].values )
17961798
17971799 X = df .values .T .astype (float )
17981800 X_imputed = model .transform (X )
0 commit comments