熊猫显示带有布尔选择的数据框列

时间:2019-09-16 19:05:18

标签: python pandas numpy

假设我有这个数据框:

df:
        W           X           Y           Z
A   2.706850    0.628133    0.907969    0.503826
B   0.651118    -0.319318   -0.848077   0.605965
C   -2.018168   0.740122    0.528813    -0.589001
D   0.188695    -0.758872   -0.933237   0.955057
E   0.190794    1.978757    2.605967    0.683509

我可以检索不包含负值的行的列,如下所示:

df[df['W'] > 0]

        W           X           Y           Z
A   2.706850    0.628133    0.907969    0.503826
B   0.651118    -0.319318   -0.848077   0.605965
D   0.188695    -0.758872   -0.933237   0.955057
E   0.190794    1.978757    2.605967    0.683509

我想与此相反,并删除具有负值的列(出于好奇)

我知道我们使用.loc []函数检索行,并且我尝试了df.loc['A' > 0],这给了我这个错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-27-6331436fa402> in <module>
----> 1 df.loc['A' > 0]

TypeError: '>' not supported between instances of 'str' and 'int'

df.loc[df['A']>0]给了我一个KeyError,因为df['A']>0返回了一个列表

让我们假设此数据帧是一个数据库,我想检索“ A”行的值为正的列,是否有其他函数可以像这样检索,还是人们不希望这么做?

3 个答案:

答案 0 :(得分:0)

您只需要将不等式从大于(>)变为小于(<)。

df[df['W'] < 0]

答案 1 :(得分:0)

您当然可以使用loc来做到这一点,但需要一点点改动:

import pandas as pd
a = {'a':[4,5,6,3,-3,1,-3],'b':[3,5,-2,5,-6,3,5]}
df = pd.DataFrame(a)
df = df.T
print(df)

输出:

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

然后使用以下方法进行过滤:

print(df.loc[['a'],df.ge(0).all()]) #Only those who are greater or equal than 0, in all cases

返回此位置,可以只选择对所选行具有所有正值的列。当然,您可以将其更改为仅针对另一特定行或一组行进行过滤:

   0  1  3  5
a  4  5  3  1

答案 2 :(得分:0)

您可以使用:

df.loc['A',df.loc['A']>0]

除了@Mstanio所示的选项:

df.loc['A'][df.loc['A'] > 0]