pandas:缺失值处理


前言

当我们在处理数据时,总会遇到数值缺失的问题,pandas在处理缺失值的方面提供了很全面的方法,主要包括:isnull()——找出缺失值;notnull()——找出非缺失值;dropna()——剔除缺失值;fillna()——填充缺失值。具体使用方法请往下看。


提示:以下是本篇文章正文内容,下面案例可供参考

一、isnull()

isnull()用来找出缺失值的位置,返回一个布尔类型的掩码标记缺失值,下面是案例:

import pandas as pd
import numpy as np
data = pd.DataFrame({'name':['Verne Raymond',np.nan,'Patrick George','Saxon MacArthur'],'age':[18,np.nan,21,None]})
data
              name   age
0    Verne Raymond  18.0
1              NaN  NaN
2   Patrick George  21.0
3  Saxon MacArthur   NaN

这里我们可以看到不管我们创建DataFrame时控制用的是np.nan还是None,创建后都会变成NaN。

data.isnull()
    name    age
0  False  False
1   True   True
2  False  False
3  False   True

二、notnull()

notnull()与isnull()正好相反,是找出非空值并用布尔值进行标记,下面是例子:

data.notnull()
    name    age
0   True   True
1  False  False
2   True   True
3   True  False

三、dropna()

dropna()就是字面意思,丢掉缺失值。

DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

参数:
axis:默认为0,表示删除行还是列,也可以用“index”和“columns”表示
how:{‘any’, ‘all’}, 默认为 ‘any’;any表示只要该行(列)出现空值就删除整行(列),all表示整行(列)都出现空值才会删除整行(列)
thresh:表示删除非空值小于thresh个数时删除
subset:列表类型,表示哪些列里有空值才删除行或列
inplace:与其他函数的inplace一样,表示是否覆盖原DataFrame

下面是例子:

data.dropna(axis=1,thresh=3)
              name
0    Verne Raymond
1              NaN
2   Patrick George
3  Saxon MacArthur
data.dropna(axis=0,how='all')
              name   age
0    Verne Raymond  18.0
2   Patrick George  21.0
3  Saxon MacArthur   NaN
data.dropna(subset = ['name'])
              name   age
0    Verne Raymond  18.0
2   Patrick George  21.0
3  Saxon MacArthur   NaN

四、fillna()

fillna()的作用是填充缺失值
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

参数:

  • value:设置用于填充DataFrame的值
  • method:默认为None;设置填充DataFrame的方法有:‘backfill’, ‘bfill’, - ‘pad’, ‘ffill’四种,其中‘backfill’和 ‘bfill’是用前面的值填充空缺值,‘pad’和 ‘ffill’是用后面的值填充空缺值
  • axis:填充缺失值所沿的轴,与上文的axis设置方法一样
  • inplace:是否替换原DataFrame,与上文的设置方法一样
  • limit:设置被替换值的数量限制
  • downcast:表示向下兼容转换类型,不常用

下面是例子:

data.fillna(0)
              name   age
0    Verne Raymond  18.0
1                0   0.0
2   Patrick George  21.0
3  Saxon MacArthur   0.0
data.fillna(method='ffill')
              name   age
0    Verne Raymond  18.0
1    Verne Raymond  18.0
2   Patrick George  21.0
3  Saxon MacArthur  21.0
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值