有没有办法强制SimpleImputer返回一个pandas字符串?

qyuhtwio  于 2023-11-15  发布在  其他
关注(0)|答案(4)|浏览(100)

下面的代码

from sklearn.impute import SimpleImputer
import pandas as pd

df = pd.DataFrame(dict(
    x=[1, 2, np.nan],
    y=[2, np.nan, 0]
))

SimpleImputer().fit_transform(df)

字符串
返回

array([[1. , 2. ],
       [2. , 1. ],
       [1.5, 0. ]])


有没有办法使用一个输入器来返回一个pandas数组而不是一个numpy数组?有没有scikit-learn实现?

zf9nrax1

zf9nrax11#

SimpleImputer返回一个转换后的数组,就像docs中提到的那样。你可以构造一个新的数组,或者用插补器的结果修改数组:

df[:] = SimpleImputer().fit_transform(df)

字符串

8ehkhllq

8ehkhllq2#

如果你想保留列(例如在后面的步骤中使用ColumnTransformers),你可以在SimpleImputer周围创建一个 Package 器:

df = pd.DataFrame({"A": [1, 2, np.NaN], "B": [3, np.NaN, 4], "C": [np.NaN, 5, 6]})

class PandasSimpleImputer(SimpleImputer):
    """A wrapper around `SimpleImputer` to return data frames with columns.
    """

    def fit(self, X, y=None):
        self.columns = X.columns
        return super().fit(X, y)

    def transform(self, X):
        return pd.DataFrame(super().transform(X), columns=self.columns)

PandasSimpleImputer().fit_transform(df)

>>>
    A   B   C
0   1.0 3.0 5.5
1   2.0 3.5 5.0
2   1.5 4.0 6.0

字符串

cld4siwp

cld4siwp3#

一般来说,sklearn中的所有转换函数都返回numpy数组。你需要习惯使用

pd.DataFrame(SimpleImputer().fit_transform(df), columns = df.columns)

字符串

cpjpxq1n

cpjpxq1n4#

有一种更简单的方法:使用scikit-learn中的set_output misc方法,如下所示:

scaler = StandardScaler().set_output(transform="pandas")

字符串

相关问题