Pandas - 删除仅含NaN值的行

16 投票
2 回答
19998 浏览
提问于 2025-04-18 16:07

我有一个数据表(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

基本上,做这个的方式是先确定列的数量,然后设置一个最小的非空值数量,接着删除那些不符合这个条件的行:

df.dropna(thresh=(len(df) - 7))

可以查看 文档

撰写回答