删除数据

使用 PySpark 进行特征工程

John Hogue

Lead Data Scientist, General Mills

数据可能哪里出错?

  • 记录错误
  • 唯一事件
  • 格式不正确
  • 重复
  • 缺失
  • 不相关

多米诺

使用 PySpark 进行特征工程

删除列

df.select(['NO', 'UNITNUMBER', 'CLASS']).show()
+----+----------+-----+
|  NO|UNITNUMBER|CLASS|
+----+----------+-----+
|   1|      null|   SF|
| 156|        A8|   SF|
| 157|       207|   SF|
| 158|      701G|   SF|
| 159|        36|   SF|

多列对我们的分析无用

  • 'NO' 自动生成的记录号
  • 'UNITNUMBER' 不相关
  • 'CLASS' 全部相同
使用 PySpark 进行特征工程

删除列

drop(*cols)

  • *cols:要删除的一列或列名列表。
  • 返回删除指定列后的新 DataFrame。
# 待删除的列
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# 删除这些列 df = df.drop(*cols_to_drop)
使用 PySpark 进行特征工程

文本筛选

  • where(condition)
    • condition:types.BooleanType 列或 SQL 表达式字符串。
    • 在条件为真时筛选数据框
  • like(other)
    • other:SQL LIKE 模式
    • 返回布尔列
  • ~
    • 逻辑非
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
使用 PySpark 进行特征工程

异常值筛选

将数据筛选在均值(μ)± 三个标准差(3σ)内

标准正态分布

使用 PySpark 进行特征工程

数值筛选示例

# 计算用于筛选的值
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# 构建三倍标准差范围(μ ± 3σ)的上下界 hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# 使用 where() 在区间内筛选 DataFrame df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
使用 PySpark 进行特征工程

删除 NA 或 NULL

DataFrame.dropna()

  • how:'any' 或 'all'。'any' 表示任一为空即删除;'all' 表示全部为空才删除。
  • thresh:int,默认 None。若指定,保留至少有 thresh 个非空值的记录(覆盖 how)。
  • subset:可选,要考虑的列名列表。
使用 PySpark 进行特征工程

删除 NA 或 NULL

# 删除含有任意 NULL 的记录
df = df.dropna()

# 若 LISTPRICE 和 SALESCLOSEPRICE 均为 NULL 则删除 df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# 至少有两列为 NULL 时删除记录 df = df.dropna(thresh=2)
使用 PySpark 进行特征工程

删除重复项

什么是重复值?

  • 两条或多条记录信息完全相同
  • 删除列或联接数据集后,应检查重复

dropDuplicates()

  • 可作用于整个 DataFrame 或指定列列表
  • 在 PySpark 中,不保证删除哪条记录的顺序
# 整个 DataFrame
df.dropDuplicates()

# 仅检查部分列 df.dropDuplicates(['streetaddress'])
使用 PySpark 进行特征工程

Passons à la pratique !

使用 PySpark 进行特征工程

Preparing Video For Download...