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