假设我有这个数据框:
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”行的值为正的列,是否有其他函数可以像这样检索,还是人们不希望这么做?
答案 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)