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

您所在的位置:网站首页 dataframe删除空值行 Pandas(1): 删除数据为空的行

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

2023-08-04 11:02| 来源: 网络整理| 查看: 265

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()无法实现删除元素的原因。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3