Pandas - 删除只有NaN值的行

Sla*_*ron 14 python rows dataframe pandas

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

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

这个问题(Slice Pandas DataFrame by Row)告诉我,如果我可以编译一个包含太多NaN值的行的列表,我可以用一个简单的方法将它们全部删除

df.drop(rows)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

EdC*_*ica 14

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

df.dropna(thresh=(len(df) - 7))
Run Code Online (Sandbox Code Playgroud)

查看文档

  • 我不得不使用len(df.columns)而不是len(df).工作就像一个魅力. (3认同)
  • 轴= 1是否告诉它删除列?至少在我的情况下,当我选择axis = 1时,列会被删除 (2认同)

Rog*_*Fan 5

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

df.dropna(thresh=df.shape[1]-7)
Run Code Online (Sandbox Code Playgroud)