在pandas dataframe的列子集中查找具有非零值的行

时间:2016-08-28 03:33:09

标签: python pandas dataframe

我有一个包含4列字符串的数据框,其他的是整数。现在我需要找出那些列中至少有一列是非零值(或> 0)的数据行。

manwra,sahAyaH,T7,0,0,0,0,T
manwra, akriti,T5,0,0,1,0,K 
awma, prabrtih,B6, 0,1,1,0,S

我的输出应该是

manwra, akriti,T5,0,0,1,0,K 
awma, prabrtih,B6, 0,1,1,0,S

我尝试过以下方法来获得答案。字符串值以列0,1,2和-1(最后一列)为单位。

KT[KT.ix[:,3:-2] != 0]

我收到的是输出

NaN,NaNNaN,NaN,NaN,NaN,NaN,NaN
NaN,NaN,NaN,NaN,NaN,1,NaN,NaN
NaN,NaN,NaN,NaN,1,1,NaN,NaN

如何获得所需的输出

3 个答案:

答案 0 :(得分:6)

假设您的数据框为df

df.loc[(df.loc[:, df.dtypes != object] != 0).any(1)]

enter image description here

答案 1 :(得分:6)

以下是使用select_dtypes()方法的替代解决方案:

In [41]: df[(df.select_dtypes(include=['number']) != 0).any(1)]
Out[41]:
        0          1   2  3  4  5  6  7
1  manwra     akriti  T5  0  0  1  0  K
2    awma   prabrtih  B6  0  1  1  0  S

说明:

In [42]: df.select_dtypes(include=['number']) != 0
Out[42]:
       3      4      5      6
0  False  False  False  False
1  False  False   True  False
2  False   True   True  False

In [43]: (df.select_dtypes(include=['number']) != 0).any(1)
Out[43]:
0    False
1     True
2     True
dtype: bool

答案 2 :(得分:2)

你很亲密:

 #your's    
 KT[KT.ix[:,3:-2] != 0]

 #works 
 KT[(KT.ix[:,3:6] > 0).any(1)]

        0         1   2  3  4  5  6   7
1  manwra    akriti  T5  0  0  1  0  K 
2    awma  prabrtih  B6  0  1  1  0  S

 #key diff
 (KT.ix[:,3:6] > 0)
       3      4      5      6
0  False  False  False  False
1  False  False   True  False
2  False   True   True  False