Feature Engineering con PySpark
John Hogue
Lead Data Scientist, General Mills

df.select(['NO', 'UNITNUMBER', 'CLASS']).show()
+----+----------+-----+
| NO|UNITNUMBER|CLASS|
+----+----------+-----+
| 1| null| SF|
| 156| A8| SF|
| 157| 207| SF|
| 158| 701G| SF|
| 159| 36| SF|
Più campi non servono per l'analisi
'NO' numero di record auto-generato'UNITNUMBER' dato irrilevante'CLASS' tutto costante drop(*cols)
*cols – un nome di colonna o un elenco di colonne da eliminare.# Elenco di colonne da eliminare cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']# Elimina le colonne df = df.drop(*cols_to_drop)
where(condition)types.BooleanType o una stringa con espressione SQL.like(other)~df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Filtra entro tre deviazioni standard (3σ) dalla media (μ)

# Calcola i valori per il filtro std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0] mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]# Crea i limiti (μ ± 3σ) superiore e inferiore hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)# Usa where() per filtrare il DataFrame tra i valori df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
DataFrame.dropna()
how: "any" o "all". Con "any", elimina un record se ha almeno un null. Con "all", elimina solo se tutti i valori sono null.thresh: int, predefinito None. Se impostato, elimina i record con meno di thresh valori non null. Sovrascrive il parametro how.subset: elenco facoltativo di colonne da considerare.# Elimina i record con valori NULL df = df.dropna()# Elimina i record se sia LISTPRICE sia SALESCLOSEPRICE sono NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])# Elimina i record in cui almeno due colonne hanno valori NULL df = df.dropna(thresh=2)
Cos'è un duplicato?
dropDuplicates()
# Intero DataFrame df.dropDuplicates()# Controlla solo un elenco di colonne df.dropDuplicates(['streetaddress'])
Feature Engineering con PySpark