You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySpark中实现类似Pandas的独热编码(One-Hot)转换?

在PySpark中实现类似Pandas get_dummies的哑变量转换

嘿,我来帮你解决这个PySpark里生成哑变量的问题!你在Pandas里用pd.get_dummies的操作,在PySpark里有两种常用的实现方式,我结合你的需求给你详细讲讲~

首先,先把你的示例数据用PySpark构建出来,方便后续测试:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when
from pyspark.ml.feature import StringIndexer, OneHotEncoder
from pyspark.ml import Pipeline

# 初始化SparkSession
spark = SparkSession.builder.appName("GenderDummyVars").getOrCreate()

# 构建原始DataFrame
sample_data = [
    (1, 38, 230, "M"),
    (2, 40, 832, "M"),
    (3, 53, 987, "F"),
    (1, 38, 764, "M"),
    (4, 63, 872, "F"),
    (5, 21, 763, "F"),
    (4, 63, 1872, "F")
]

df = spark.createDataFrame(sample_data, schema=["id", "age", "cost", "gender"])
df.show()

方法一:用when函数直接生成哑变量(简单场景首选)

如果你的类别数量很少(比如这里只有M和F),直接用when函数生成对应列是最直观、最简洁的方式,不需要依赖ML库:

# 生成M列:gender为M时赋值1,否则0
# 生成F列:gender为F时赋值1,否则0
final_df = df.withColumn("M", when(col("gender") == "M", 1).otherwise(0)) \
             .withColumn("F", when(col("gender") == "F", 1).otherwise(0))

final_df.show()

运行这段代码后,就能得到你想要的结果——保留原gender列的同时,新增了M和F两个哑变量列,和Pandas的效果完全一致。

方法二:用ML库的编码工具(多类别场景更适用)

如果你的gender列后续可能扩展出更多类别,用PySpark ML库的StringIndexer+OneHotEncoder组合会更灵活,不过默认会生成向量类型的列,我们需要把向量拆成单独的列:

# 第一步:将字符串类型的gender转为数值索引
indexer = StringIndexer(inputCol="gender", outputCol="gender_idx")
# 第二步:将数值索引转为独热编码向量
encoder = OneHotEncoder(inputCol="gender_idx", outputCol="gender_onehot")

# 用Pipeline串联两个步骤,执行转换
pipeline = Pipeline(stages=[indexer, encoder])
encoded_df = pipeline.fit(df).transform(df)

# 将独热向量拆分为M和F列(注意向量索引顺序由类别频率决定,可通过indexer.fit(df).labels查看)
final_df_ml = encoded_df.withColumn("M", col("gender_onehot")[0]) \
                        .withColumn("F", col("gender_onehot")[1]) \
                        .drop("gender_idx", "gender_onehot")

final_df_ml.show()

提示:你可以通过indexer.fit(df).labels查看类别对应的索引顺序,确保拆分的列和预期一致(比如输出['M', 'F']的话,gender_onehot[0]就是M的哑变量)。

这两种方法都能实现你要的效果,根据你的实际场景选择就好啦~

内容的提问来源于stack exchange,提问作者Pallavi Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:59:33