问题描述
我有一个有疾病症状的 DataFrame,我想在整个 DataFrame 上运行 FP Growt。 FP Growt 需要一个数组作为输入,它可以使用以下代码:
dfFPG = (df.select(F.array(df["Gender"],df["polyuria"],df["polydipsia"],df["Sudden weight loss"],df["Weakness"],df["polyphagia"],df["Genital rush"],df["Visual blurring"],df["Itching"]).alias("features")
from pyspark.ml.fpm import FPGrowth
fpGrowth = FPGrowth(itemsCol="features",minSupport=0.3,minConfidence=0.2)
model = fpGrowth.fit(dfFPG)
model.freqItemsets.show(20,truncate=False)
功能列表更长,如果我必须更改 df 的名称,我必须使用查找和替换。我知道我可以使用 F.col("Gender")
而不是 df["Gender"]
,但是有没有办法将 F.array()
中的所有列一次性放入,并且能够像 df["Age"]
这样排除少数列?
或者,有没有其他有效的方法来为 FP Growt 准备我不知道的分类特征?
解决方法
您可以使用 df.columns
获取所有列名并将它们全部放入 array
中:
import pyspark.sql.functions as F
dfFPG = df.select(F.array(*[c for c in df.columns if c not in ['col1','col2']]).alias("features"))