Pyspark特征工程--Imputer

Imputer

class pyspark.ml.feature.Imputer(strategy=‘mean’, missingValue=nan, inputCols=None, outputCols=None)

用于完成缺失值的插补估计器,使用缺失值所在列的平均值中值。 输入列应该是 DoubleType 或 FloatType。 目前 Imputer 不支持分类特征,并且可能为分类特征创建不正确的值。

请注意,均值/中值(mean/median)是在过滤掉缺失值后计算的,输入列中的所有 Null 值都被视为缺失,因此也被估算。用于计算中位数,**pyspark.sql.DataFrame.approxQuantile()**使用时的相对误差为 0.001.

默认使用的是均值

surrogateDF:返回一个包含 inputCols 及其对应替代项的 DataFrame,这些代理项用于替换输入 DataFrame 中的缺失值

01.初始化

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.Driver.host","192.168.1.4")\
    .config("spark.ui.showConsoleProgress","false")\
    .appName("Imputer").master("local[*]").getOrCreate()

02.创建数据:

df = spark.createDataFrame([(1.0, float("nan")), (2.0, float("nan")), (2.0, float("nan"))\
    , (float("nan"), 3.0),(4.0, 4.0), (5.0, 5.0)], ["a", "b"])
df.show()

​ 输出结果:

+---+---+
|  a|  b|
+---+---+
|1.0|NaN|
|2.0|NaN|
|2.0|NaN|
|NaN|3.0|
|4.0|4.0|
|5.0|5.0|
+---+---

03.使用默认方式填充nan值(均值)

from pyspark.ml.feature import Imputer
imputer = Imputer(inputCols=["a", "b"], outputCols=["out_a", "out_b"])
model = imputer.fit(df)
model.transform(df).show()

​ 输出结果:

+---+---+-----+-----+
|  a|  b|out_a|out_b|
+---+---+-----+-----+
|1.0|NaN|  1.0|  4.0|
|2.0|NaN|  2.0|  4.0|
|2.0|NaN|  2.0|  4.0|
|NaN|3.0|  2.8|  3.0|
|4.0|4.0|  4.0|  4.0|
|5.0|5.0|  5.0|  5.0|
+---+---+-----+-----

04.使用中值进行填充nan

imputer2 = Imputer(strategy="median",inputCols=["a", "b"], outputCols=["out_a", "out_b"])
model2 = imputer2.fit(df)
model2.transform(df).show()

​ 输出结果:

+---+---+-----+-----+
|  a|  b|out_a|out_b|
+---+---+-----+-----+
|1.0|NaN|  1.0|  4.0|
|2.0|NaN|  2.0|  4.0|
|2.0|NaN|  2.0|  4.0|
|NaN|3.0|  2.0|  3.0|
|4.0|4.0|  4.0|  4.0|
|5.0|5.0|  5.0|  5.0|
+---+---+-----+-----+

05.查看填充使用的DataFrame

model.surrogateDF.show()

​ 输出结果:

+---+---+
|  a|  b|
+---+---+
|2.8|4.0|
+---+---+
model2.surrogateDF.show()

​ 输出结果:

+---+---+
|  a|  b|
+---+---+
|2.0|4.0|
+---+---+
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值