Apache spark Pyspark->;StringIndexer:“;无”;值替换为数字
我有一个数据框,它有几个“无”值。 通过StringIndexer将字符串列转换为浮点列后,“无”值将替换为数字 问题: 如何将字符串列转换为浮点列,但将“None”值保留为“None” 谢谢Apache spark Pyspark->;StringIndexer:“;无”;值替换为数字,apache-spark,pyspark,Apache Spark,Pyspark,我有一个数据框,它有几个“无”值。 通过StringIndexer将字符串列转换为浮点列后,“无”值将替换为数字 问题: 如何将字符串列转换为浮点列,但将“None”值保留为“None” 谢谢 # Transform nominal attributes to numeric attributes for columnName, columnType in self.rawData.dtypes: if columnType == "string": self.rawDa
# Transform nominal attributes to numeric attributes
for columnName, columnType in self.rawData.dtypes:
if columnType == "string":
self.rawData = PreProcess.TransformNominalToNumeric(self.rawData, columnName)
class PreProcess:
@staticmethod
def TransformNominalToNumeric(dataFrame, inputColumn):
"""Transformation of nominal attributes into numeric"""
outputColumn = inputColumn + "_index"
indexer = StringIndexer(inputCol = inputColumn, outputCol = outputColumn, handleInvalid = "keep")
indexer = indexer.fit(dataFrame)
dataFrame = indexer.transform(dataFrame)
dataFrame = dataFrame.drop(inputColumn)
dataFrame = dataFrame.withColumnRenamed(outputColumn, inputColumn)
return dataFrame
将无效数据放在索引numLabels处的特殊附加存储桶中
您可以在变换后手动替换值
从pyspark.sql.functions导入col,当
dataFrame=spark.createDataFrame([“a”,无,“b”],“字符串”).toDF(“值”)
inputColumn=“值”
outputColumn=inputColumn+“\u索引”
索引器=字符串索引器(
inputCol=inputColumn,outputCol=outputColumn,handleInvalid=“保留”
).fit(数据帧)
(索引器)
.transform(数据帧)
.withColumn(outputColumn,当(col(outputColumn)==len(indexer.labels),无)。否则(col(outputColumn)))
.show())
# +-----+-----------+
#|价值|价值|指数|
# +-----+-----------+
#| a | 0.0|
#|空|空|
#| b | 1.0|
# +-----+-----------+
但是,如果您计划稍后使用pyspark.ml
,那么这没有任何价值。没有pyspark.ml
算法接受NULL
s,因此您必须根据类型和要求进行插补、删除和编码(如此处所示),然后才能继续
将无效数据放在索引numLabels处的特殊附加存储桶中
您可以在变换后手动替换值
从pyspark.sql.functions导入col,当
dataFrame=spark.createDataFrame([“a”,无,“b”],“字符串”).toDF(“值”)
inputColumn=“值”
outputColumn=inputColumn+“\u索引”
索引器=字符串索引器(
inputCol=inputColumn,outputCol=outputColumn,handleInvalid=“保留”
).fit(数据帧)
(索引器)
.transform(数据帧)
.withColumn(outputColumn,当(col(outputColumn)==len(indexer.labels),无)。否则(col(outputColumn)))
.show())
# +-----+-----------+
#|价值|价值|指数|
# +-----+-----------+
#| a | 0.0|
#|空|空|
#| b | 1.0|
# +-----+-----------+
但是,如果您计划稍后使用
pyspark.ml
,那么这没有任何价值。没有pyspark.ml
算法接受NULL
s,因此您必须根据类型和要求进行插补、删除和编码(如此处所示),然后才能继续 多谢各位。它真的帮助了我。将标称属性转换为数值后,我使用插补器将“空”值替换为平均值。谢谢。它真的帮助了我。将标称属性转换为数值后,我使用插补器将“空”值替换为平均值。