logo

缺失值处理

王哲峰 / 2022-09-13


目录

缺失值处理理论

当缺失数据比例很小时,可直接对缺失记录进行舍弃或进行手工处理

实际数据中,缺失数据往往占有相当的比重,这时如果手工处理,非常低效; 如果舍弃缺失记录,则会丢失大量信息,使不完全观测数据与观测数据间产生系统差异, 对这样的数据进行分析,可能会得出错误的结论

缺失的类型:

在对缺失数据进行处理前, 了解数据缺失的机制和形式是十分必要的. 将数据集中不含缺失值的变量称为 完全变量, 数据集中含有缺失值的变量称为不完全变量

从缺失的分布可以将缺失分为:

对于完全随机缺失和完全非随机缺失,删除记录是不合适的,随机缺失可以通过已知变量对缺失值进行估计; 非随机缺失没有很好的处理方法;

缺失值处理实战

math

Numpy

Pandas

  1. Python 缺失值类型
    • None
    • numpy.nan
    • NaN
    • NaT
  2. 缺失值配置选项
    • inf-inf 当作 NA
      • pandas.options.mod.use_inf_as_na = True
  3. 缺失值检测
    • pd.isna()
    • .isna()
    • pd.notna()
    • .notna()
    • pd.isnull()
    • pd.notnull()
    • pd.Series.notna()
    • pd.DataFrame.notna()
  4. 缺失值填充
    • .fillna()
      • .where(pd.notna(df), dict(), axis = "columns")
      • .ffill()
        • .fillna(method = "ffill", limit = None)
      • .bfill()
        • .fillna(method = "bfill", limit = None)
    • .interpolate(method)
    • .replace(, method)
  5. 缺失值删除
    • .dropna(axis)

Scipy

Missingno

$ pip install missingno
import pandas as pd
import missingno as msno

# data
df = pd.read_csv(data.csv)

# matrix
msno.matrix(df)

# bar chart
msno.bar(df)

# heatmap
msno.heatmap(df)

缺失值插值

Pandas 插值

pandas.DataFrame.interpolate

pandas.DataFrame.interpolate(
    method = 'linear', 
    axis = 0, 
    limit = None, 
    inplace = False, 
    limit_direction = 'forward', 
    limit_area = None, 
    downcast = None, 
    **kwargs
)
s = pd.Series([])
df = pd.DataFrame({})

s.interpolate(args)
df.interpolate(args)
df[""].interpolate(args)

Scipy 插值

scipy.interpolate.XXX

参考