Pandas - 删除仅含NaN值的行
我有一个数据表(DataFrame),里面有很多NaN值。我想删除那些包含太多NaN值的行;具体来说,就是7个或更多的NaN值。
我尝试了用dropna这个函数,但发现它会贪心地删除包含任何 NaN值的列或行。
这个问题(按行切片Pandas数据表)告诉我,如果我能先找出那些NaN值太多的行,然后就可以用一个简单的方式把它们全部删除。
df.drop(rows)
我知道可以用count函数来计算非空值的数量,然后从总数中减去,得到NaN值的数量(有没有更直接的方法来计算一行中的NaN值?)。不过,即便如此,我还是不太确定怎么写一个循环,逐行遍历这个数据表。
这里有一些伪代码,我觉得可能是个好方向:
### LOOP FOR ADDRESSING EACH row:
m = total - row.count()
if (m > 7):
df.drop(row)
我对Pandas还很陌生,所以我很欢迎其他解决这个问题的方法;无论是简单的还是复杂的。
2 个回答
5
df.dropna 这个函数的可选参数 thresh 让你可以设置一个最小值,只有当一行中非空值的数量达到这个最小值时,这一行才会被保留下来。
df.dropna(thresh=df.shape[1]-7)
16