目录
  • 一 、缺失值
    • 1 缺失值类型
    • 2 缺失值的认定
    • 3 查看缺失情况
    • 4 处理方法(1)——缺失值填充
      • 简单填充df.fillna()
      • 插值法填充
    • 5 处理方法(2)——直接删除

一、缺失值

1 缺失值类型

  • 空值:在pandas中的空值是:" " ,空的字符串,不是缺失值。
  • 缺失值:pandas里,如果是DataFrame(数据帧)中,缺失值可以表示为NaN或者NaT(缺失时间) 。可以用 Numpy的np.NaN/np.nan直接定义赋值缺失值。
  • NaN 是浮点型
  1. 针对数值为 0 的情况 ,需要进行实际的分析 ,回归到原始数据中去,判断该数据为 0 时是否具有实际意义。如果没有就将其作为缺失值做删除处理 。
  2. 针对数据为空值的情况,如果该特征数据缺失情况低于10% ,则结合该特征的重要性进行综合判断 。如果字段重要性较低,则考虑直接删除,如果字段重要性较高 ,则进行插值法或者采用简单填充法。

2 缺失值的认定

  • 元素级别缺失判定
# 返回true/false bool型DataFrame 或者 Series
df.notna() / df.notnull() # 不是缺失为True,缺失=False
df.isna() / df.isnull() # 是缺失=True,不是缺失=False
df.col.notna() / df.col.isna() df['col'].notnull() / df['col'].isnull()# 支持Series
  • 列/行级别缺失判定
# 返回 bool型Series
df.isnull().any() # 列只要有一个缺失=True
df.isna().any(1) # 行只要有一个缺失=True

df.isnull().any().any() # 表级别判断

3 查看缺失情况

df.info() # 直接查看信息
df.isnull().sum() # 每列有多少个缺失值
df.isna().sum(1) # 每行有多少个缺失值
df.isna().sum().sum() # 总共有几个缺失值
df.count() # 统计列的非NaN个数
df.loc[:,df.isna().any()] # 返回有缺失的列(行全要	,列只要为True的)
df.loc[df.isna().any(1)] # 返回有缺失的行
df.loc[~(df.isna().any(1))] # 返回没有缺失的行

4 处理方法(1)——缺失值填充

简单填充df.fillna()

df.fillna(value=None, method=None, axis=None, 
	inplace=False, limit=None, downcast=None, **kwargs)

功能说明:
Fill NA/NaN values using the specified method。

参数说明:

  • value:需要用什么值去填充缺失值,可以是scalar, dict(设置每列用不同值填), Series, or DataFrame;
  • method:设置填充的方式 。pad / ffill:向前填充;backfill / bfill:向后填充;
    注意:假如设置method方式,就不需要传入value参数了。还要注意轴向axis的方向。
    一般轴向axis都为0(竖向填充) ,横向填充没啥意义 。
  • axis:{0 or 'index'(竖向填充), 1 or 'columns'(横向填充)};
  • inplace:是否修改原df,修改(True)时,返回值为None;
  • limit:限定填充个数。默认为None ,表示填完。
    注意:当指定method、axis 、limit ,此时limit限定方向填充的个数,不一定缺失值填完;
    当传入value 、limit时,axis参数不起作用 ,只能按列向下填充limit个缺失值 。
  • downcast:向下投射数据类型,一般不用设置,Python自动转换。
df.fillna(0) # 传入标量0	,用0填充所有缺失值

# 每列向下填充2个缺省值,axis参数不起作用
df.fillna(value=1,axis=0,limit=2)
# df.fillna(value=0,axis=1,limit=2)

# 传入dict,每列分别用不同的值填充
df.fillna(value={'A': 0, 'B': 1, 'C': 2, 'D': 3})

# 用前一个值向前填充缺省值	,限制填充个数为1,默认轴向为0(竖向填充)
df.fillna(method='ffill',limit=1)

# 用各自列的均值填充,假如该列可以计算均值的话
df.fillna(df.mean())
# 只对A列且用A列的均值填充缺省值
df.fillna({'A': df.mean()['A']})

插值法填充

  Series 和 DataFrame 对象都有interpolate()方法 ,默认情况下,该函数在缺失值处执行线性插值。这个方法是利用数学方法来估计缺失点的值,对于较大的数据非常有用 。
(待查补充)

5 处理方法(2)——直接删除

df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

功能说明:
删除含有空值的行或列。
参数说明:

  • axis:维度 ,axis=0表示index行,axis=1表示columns列 ,默认为0;
  • how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列 ,默认为any;
  • thresh:axis中至少有thresh个非缺失值,否则删除;
  • subset:[col1,...,coln],根据某n列判断是否有缺失删除行;[row1,...,rown] ,根据某n行判断是否有缺失删除列。判断时,只要其中有1列/行有缺失值就删除;
  • inplace:是否修改原df,修改(True)时 ,返回值为None 。
df.dropna() # 行只要有一个缺失值,就删除该行
df.dropna(axis=1) # 列只要有一个缺失值,就删除该列(谨慎使用!)
df.dropna(how='all',axis=1) # 列都缺失时	,才删除该列
df.dropna(thresh=3) # 行至少有3个非缺失值才不删除
df.dropna(axis=1,subset=[3,4]) # 根据index为3和4的行,判断列是否删除
df.dropna(subset=["col_1","col_3"]) # 根据columns为"col_1"和"col_3"的列,判断行是否删除

df.col.dropna() # 指定列的缺失值删除
文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归趣快排营销www.seoguRubloG.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系✚Qq61910465