Pandas DataFrame的多维布尔索引 - 删除NaN行和列

时间:2015-04-30 09:19:46

标签: python numpy pandas

我有一个像

这样的Pandas DataFrame
df = pd.DataFrame([[1,-2,-3],[4,5,6],[1,3,4]])

看起来像

   0  1  2
0  1 -2 -3
1  4  5  6
2  1  3  4

我想获得此数据框的子集,只有负值

    1    2
0  -2   -3

我想尝试布尔索引(但我不知道如何使用2维布尔索引)

In [7]: df_flag = df < 0
In [8]: df_flag
Out[8]:
       0      1      2
0  False   True   True
1  False  False  False
2  False  False  False

所以我做了

In [15]: df[df_flag]
Out[15]:
    0   1   2
0 NaN  -2  -3
1 NaN NaN NaN
2 NaN NaN NaN

使用2维布尔索引时,是否有办法(自动)删除充满NaN的列和行?

1 个答案:

答案 0 :(得分:1)

您可以拨打dropna两次来电,dropna接受一个thresh参数,如果有n个非Na值,则该参数不会丢弃整个轴所以下面会删除行然后列:

In [283]:

df[df<0].dropna(axis=0, thresh=1).dropna(axis=1)
Out[283]:
   1  2
0 -2 -3

第一个dropna

的结果
In [284]:

df[df<0].dropna(axis=0, thresh=1)
Out[284]:
    0  1  2
0 NaN -2 -3

<强>更新

axis param接受多个args,所以实际上你可以一次调用,谢谢@scls:

In [285]:

df[df<0].dropna(axis=[0,1], thresh=1)
Out[285]:
   1  2
0 -2 -3