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|
+---+---+