Pandas - 删除只有NaN值的行

时间:2014-08-05 18:56:15

标签: python pandas rows dataframe

我有一个包含许多NaN值的DataFrame。 我想删除包含太多NaN值的行;具体来说:7个或更多。

我尝试了几种使用 dropna 函数的方法,但很明显它贪婪地删除了包含任何 NaN值的列或行。

这个问题(Slice Pandas DataFrame by Row)告诉我,如果我可以编译一个NaN值太多的行列表,我可以用一个简单的

删除它们。
df.drop(rows)

我知道我可以使用 count 函数计算非空值,我可以将它从总数中减去并以这种方式获得NaN计数(有没有直接计算NaN值的方法)行?)。但即便如此,我也不确定如何编写一个逐行遍历DataFrame的循环。

这里有一些我认为正确的伪代码:

### LOOP FOR ADDRESSING EACH row:
    m = total - row.count()
    if (m > 7):
        df.drop(row)

我仍然是熊猫的新手,所以我对解决这个问题的其他方法非常开放;他们是否更简单或更复杂。

2 个答案:

答案 0 :(得分:14)

基本上,这样做的方法是确定cols的数量,设置非nan值的最小数量,并删除不符合此条件的行:

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

请参阅docs

答案 1 :(得分:3)

df.dropna 的可选thresh参数允许您为其保留行的最小非NA值。

df.dropna(thresh=df.shape[1]-7)