我有一个包含许多NaN值的数据帧。我想删除包含太多NaN值的行,特别是:7或更多。
我尝试了几种使用dropna函数的方法,但很明显它会贪婪地删除包含任何NaN值的列或行。
这个问题(Slice Pandas DataFrame by Row)告诉我,如果我可以编译一个NaN值太多的行列表,我可以用一个简单的

df.drop(rows)

我知道我可以使用count函数来计算非空值,我可以用它从总数中减去,然后用这种方法得到NaN计数(有没有直接的方法来计算一行中的NaN值?)尽管如此,我还是不知道如何编写一个循环来逐行遍历数据帧。
以下是一些我认为正确的伪代码:
### LOOP FOR ADDRESSING EACH row:
    m = total - row.count()
    if (m > 7):
        df.drop(row)

我对熊猫还是个新手,所以我对解决这个问题的其他方法非常开放,不管它们是简单的还是复杂的。

最佳答案

基本上,这样做的方法是确定列的数量,设置非NaN值的最小数量,并删除不符合此标准的行:

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

参见docs

10-04 22:22
查看更多