如何删除大熊猫中除前三列外所有列值为空的行?

时间:2019-08-05 17:33:56

标签: python pandas dataframe

我有一个像这样的数据框:

df
col1   col2   col3   col4   col5    col6
 1      2       NA    3      NA      NA
 4      5       6     7      NA      NA
 8      9       NA    NA     NA      NA
 10     11      NA    NA     NA      NA
 13     14      15    NA     16      17

col1和col2没有NA值,我想删除那些从col3到col6(可以是col100等)的所有值都是NA的行。

我可以使用以下代码来做到这一点,

 df[(df.col3.notnull)&(df.col4.notnull)&(df.col5.notnull)&(df.col6.notnull)]

但是,如果列数增加,则此任务不是一个好主意,在其中写入所有列名,

我正在寻找的结果是

df
col1   col2   col3   col4   col5    col6
 1      2       NA    3      NA      NA
 4      5       6     7      NA      NA
 13     14      15    NA     16      17

有没有熊猫方法可以最有效地做到这一点?

3 个答案:

答案 0 :(得分:2)

dropnathresh的一种方法是:每行3个有效值

df.dropna(thresh=3)
Out[254]: 
   col1  col2  col3  col4  col5  col6
0     1     2   NaN   3.0   NaN   NaN
1     4     5   6.0   7.0   NaN   NaN
4    13    14  15.0   NaN  16.0  17.0

答案 1 :(得分:1)

另一种方法是忽略col1col2并检查all(axis=1)是否适用

df.drop(['col1', 'col2'],1).isnull().all(1)

答案 2 :(得分:1)

另一种方法是计算总和和过滤器不等于0

df[df.iloc[:,2:].sum(1).ne(0)]

   col1  col2  col3  col4  col5  col6
0     1     2   NaN   3.0   NaN   NaN
1     4     5   6.0   7.0   NaN   NaN
4    13    14  15.0   NaN  16.0  17.0