我有一个像这样的数据框:
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
有没有熊猫方法可以最有效地做到这一点?
答案 0 :(得分:2)
dropna
和thresh
的一种方法是:每行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)
另一种方法是忽略col1
和col2
并检查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