Pandas(1): 删除数据为空的行

1. 解决问题:

在pandas中处理并删除指定G中为空值的行。

2. 解决尝试:

删除所有为NaN的值,如果拿出第0行,第二列数据,与第1行第二列数据,得到如下:

貌似可以做两个数据进行等于的逻辑判断,但是实际上是不可以的,如下所示:他们返回的值是False, 但是实际上,两个值为空,应该相等的。

如果我们使用如下的变量进行验证,这个与使用pandas索引出来处理的结果是不一样的,在此处,我没有找到原因(如果有小伙伴知道的话,请留言告诉我)

所以我们不能使用空值来判断,经过调研,了解到,有np.isnan()函数可以调用,进行如下操作,我们可以通过调用API的方式来进行判断该值是否空值。

所以,我们想到使用判断该值是否为空,来进行删除空值的所在的行。

def data_dropnan(data):
    for i in data.index:
        if np.isnan(data.iloc[i][1]):
            data = data.drop([i])
    return data

但是运行以后会报错:

IndexError: single positional indexer is out-of-bounds

这个问题我还没有解决,我不知道怎么解决这个问题,如果有小伙伴知道,请私信我。我的理解是,在 i 循环到最后一个数时,判断下标越界了。

修改以后函数如下:

def data_dropnan(data):
    for i in data.index:
        if i < data.shape[0]:
            if np.isnan(data.iloc[i][1]):
                print(i)
                data = data.drop(i)
    return data

输出仍然不满足,并没有删除我认为的空值:

不知道为什么会这样,待后续研究。

 

尝试使用现成API,了解到有np.dropna()函数,使用效果如下:

修改threshold,得到:

再次修改参数,得到如下,如果要删除空值的话,需要配置subset参数,该参数指定特定列,而axis=0,表示删除特定行。

以上的操作方式均高效,也不具有灵活性,经过google,百度搜索得到某函数:该函数表示删除数据data中,D列,所有为None的行,同理,更换None,可以删除特定值的行。

data2 = data[~data.D.isin([None])]

 

3.结论

使用data[~data.D.isin([?])]的方式删除指定数据的行,pandas中的drop函数适合删除整行整列,在本文中没有找到为什么drop()无法实现删除元素的原因。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值