如何仅使用 SimpleImputer 或等效工具转换某些列

jua*_*nte 8 python pandas scikit-learn data-science imputation

我正在使用 scikit 库迈出第一步,发现自己需要回填数据框中的某些列。

我已经仔细阅读了文档,但我仍然不知道如何实现这一点。

为了使这更具体,假设我有:

A = [[7,2,3],[4,np.nan,6],[10,5,np.nan]]
Run Code Online (Sandbox Code Playgroud)

我想用平均值而不是第三列填充第二列。如何使用 SimpleImputer(或其他辅助类)执行此操作?

由此演变而来,自然的后续问题是:如何用平均值填充第二列,用常数填充最后一列(显然,仅适用于没有值的单元格)?

lia*_*ras 13

无需使用 SimpleImputer。
DataFrame.fillna()也可以做这项工作

  • 对于第二列,使用

    column.fillna(column.mean(), inplace=True)

  • 对于第三列,使用

    column.fillna(constant, inplace=True)

当然,您需要column用您想要更改的 DataFrame 列和constant所需的常量替换。


编辑
由于inplace不鼓励使用并且将被弃用,因此语法应为

column = column.fillna(column.mean())
Run Code Online (Sandbox Code Playgroud)


kev*_*s_1 6

按照 Dan 的建议,使用ColumnTransformerSimpleImputer回填列的示例是:

import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer

A = [[7,2,3],[4,np.nan,6],[10,5,np.nan]]

column_trans = ColumnTransformer(
[('imp_col1', SimpleImputer(strategy='mean'), [1]),
 ('imp_col2', SimpleImputer(strategy='constant', fill_value=29), [2])],
remainder='passthrough')

print(column_trans.fit_transform(A)[:, [2,0,1]])
# [[7 2.0 3]
#  [4 3.5 6]
#  [10 5.0 29]]
Run Code Online (Sandbox Code Playgroud)

这种方法有助于构建更适合大型应用程序的管道