PostgreSQL-13-缺失值处理

时间:2021-11-12 22:49:59

-- 1、查看缺失值
CREATE TABLE dnull AS SELECT * FROM data; -- 复制数据
SELECT * FROM dnull WHERE
房屋编码 IS NULL OR
小区 IS NULL OR
朝向 IS NULL OR
房屋单价 IS NULL OR
参考首付 IS NULL OR
参考总价 IS NULL OR
经度 IS NULL OR
纬度 IS NULL; -- 查询缺失值


-- 2、缺失值处理方法1:删除
DELETE FROM dnull WHERE 房屋单价 IS NULL; -- 删除单列缺失值
DELETE FROM dnull WHERE
房屋编码 IS NULL OR
小区 IS NULL OR
朝向 IS NULL OR
房屋单价 IS NULL OR
参考首付 IS NULL OR
参考总价 IS NULL OR
经度 IS NULL OR
纬度 IS NULL; -- 删除多列数据


-- 3、缺失值处理方法2:均值填充
SELECT AVG(房屋单价) FROM dnull; -- 查看均值(如果为空则该列没有有效数据)
UPDATE dnull
SET 房屋单价 = (SELECT AVG(房屋单价) FROM dnull)
WHERE 房屋单价 IS NULL; -- 直接填充均值


-- 4、缺失值处理方法2:众数填充
SELECT 朝向,COUNT(朝向) FROM dnull GROUP BY 朝向 ORDER BY COUNT(朝向) DESC;
SELECT 参考总价,COUNT(参考总价) FROM dnull GROUP BY 参考总价 ORDER BY COUNT(参考总价) DESC; -- 查询众数
-- 这里注意了,一般越离散的数据越适用
UPDATE dnull SET 参考总价 =
(
WITH zs AS (SELECT 参考总价,COUNT(参考总价) FROM dnull GROUP BY 参考总价)
SELECT MAX(参考总价) FROM zs
)
WHERE 参考总价 IS NULL; -- 直接填充众数
-- 这里通过WITH语句来筛选众数的最大值


-- 注意:当数据本身有特殊含义的时候,尽量不填充缺失值,直接删除数据即可,例如一个街镇的人口数等