从数据框熊猫中获取单个值

use*_*780 2 python pandas

我有一个数据框 A:

       's'   'S'   'T'
 0     'abc'  'a'   12
 1     'def'  'b'   15
 2     'abc'  'b'   1.4
Run Code Online (Sandbox Code Playgroud)

现在我想拥有 'T' 的值,其中 's' == 'abc' 和 'S' == 'b'

所以我试过:

  idx = (A['s'] == 'abc') & (A['S'] == 'b')
Run Code Online (Sandbox Code Playgroud)

但我看到 .get_value() 已被弃用,并且:

 number = A.at[idx,'T']
Run Code Online (Sandbox Code Playgroud)

给出这个错误:

ValueError: At based indexing on an integer index can only have integer indexers
Run Code Online (Sandbox Code Playgroud)

编辑:

 number = A.loc[idx, 'T']
Run Code Online (Sandbox Code Playgroud)

返回数据帧而不是值(整数或浮点数)

 print(number)

 2    1.4
 Name: T, dtype: float64
Run Code Online (Sandbox Code Playgroud)

这样做时:

 number2 = 1.3
 if (number != number2):
Run Code Online (Sandbox Code Playgroud)

我得到:

  ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

过滤后你得到one item Series,所以选择第一个值是可能的使用iat

number = A.loc[idx,'T'].iat[0]
print (number)
14
Run Code Online (Sandbox Code Playgroud)

但是如果掩码返回更多值,得到:

print (A)
     s  S   T
0  abc  a  12
1  abc  b  15
2  abc  b  14

idx = (A['s'] == 'abc') & (A['S'] == 'b')
print (idx)
0    False
1     True
2     True
dtype: bool

number = A.loc[idx,'T']
print (number)
1    15
2    14
Name: T, dtype: int64
Run Code Online (Sandbox Code Playgroud)

这里可以使用相同的方法 - 选择条件的第一个值:

number = A.loc[idx,'T'].iat[0]
print (number)
15
Run Code Online (Sandbox Code Playgroud)