从pandas的数据框中获取单个值

3

I have a dataframe A:

       's'   'S'   'T'
 0     'abc'  'a'   12
 1     'def'  'b'   15
 2     'abc'  'b'   1.4

现在我想要得到当's'等于'abc'且'S'等于'b'时'T'的值。

因此我尝试了以下方法:

  idx = (A['s'] == 'abc') & (A['S'] == 'b')

但我注意到 .get_value() 被弃用了,而且:

 number = A.at[idx,'T']

产生了以下错误:

ValueError: At based indexing on an integer index can only have integer indexers

EDIT:

 number = A.loc[idx, 'T']

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

 print(number)

 2    1.4
 Name: T, dtype: float64

进行此操作时:

 number2 = 1.3
 if (number != number2):

I get:

  ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 
2个回答

9

经过筛选,您得到了一个项目系列,因此要选择第一个值,可以使用iat

number = A.loc[idx,'T'].iat[0]
print (number)
14

但是,如果掩码返回更多的值,将会得到:
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

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

number = A.loc[idx,'T'].iat[0]
print (number)
15

3

上述代码会抛出“idx未定义”的错误,访问索引的默认方式是使用 dataframe.index而非idx。

正确写法应该是:

number = A.loc[A.index,'T'].iat[0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接