Python - 如果两列是NaN,则删除行

Kev*_*n M 13 python dataframe pandas

这是此问题的扩展,其中OP想要知道如何删除单个列中的值为NaN的行.

我想知道如何删除2(或更多)列中的值都是 NaN的行.使用第二个答案创建的数据框:

In [1]: df = pd.DataFrame(np.random.randn(10,3))

In [2]: df.ix[::2,0] = np.nan; df.ix[::4,1] = np.nan; df.ix[::3,2] = np.nan;

In [3]: df
Out[3]:
          0         1         2
0       NaN       NaN       NaN
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN
Run Code Online (Sandbox Code Playgroud)

如果我使用drop.na()命令,特别是drop.na(subset=[1,2]),那么它完成一个"或"类型drop并离开:

In[4]: df.dropna(subset=[1,2])
Out[4]: 
          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
5 -1.250970  0.030561 -2.678622
7  0.049896 -0.308003  0.823295
Run Code Online (Sandbox Code Playgroud)

我想要的是一个"和"类型的drop,它会NaN在列索引1 2中删除行.这将留下:

          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN
Run Code Online (Sandbox Code Playgroud)

只删除第一行的地方.

有任何想法吗?

编辑:更改数据框值以保持一致性

Alb*_*oso 17

以下两种中的任何一种:

df.dropna(subset=[1, 2], how='all')
Run Code Online (Sandbox Code Playgroud)

要么

df.dropna(subset=[1, 2], thresh=1)
Run Code Online (Sandbox Code Playgroud)

  • 现在我觉得自己像个白痴,应该明白这一点......谢谢! (2认同)

rag*_*esz 6

指定dropna()方法:

df.dropna(subset=[1,2], how='all')
Run Code Online (Sandbox Code Playgroud)