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)
按照 Dan 的建议,使用ColumnTransformer和SimpleImputer回填列的示例是:
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)
这种方法有助于构建更适合大型应用程序的管道。
| 归档时间: |
|
| 查看次数: |
6067 次 |
| 最近记录: |