如何使用条件索引获取单元格上的标量值

use*_*733 28 python pandas

我有如下所示的数据框.我需要获取B列的标量值,这取决于A的值(这是我脚本中的变量).我正在尝试loc()函数,但它返回一个Series而不是标量值.如何获得标量值()?

>>> x = pd.DataFrame({'A' : [0,1,2], 'B' : [4,5,6]})
>>> x
   A  B
0  0  4
1  1  5
2  2  6

>>> x.loc[x['A'] == 2]['B']
2    6
Name: B, dtype: int64

>>> type(x.loc[x['A'] == 2]['B'])
<class 'pandas.core.series.Series'>
Run Code Online (Sandbox Code Playgroud)

Noa*_*oah 29

首先,您最好从以下位置访问行索引和列索引.loc:

x.loc[x['A'] == 2, 'B']
Run Code Online (Sandbox Code Playgroud)

其次,您可以始终使用.values系列或数据框来获取基础numpy矩阵:

In : x.loc[x['A'] == 2, 'B'].values[0]
Out: 6
Run Code Online (Sandbox Code Playgroud)

更新如果您对原始问题的"条件索引"不感兴趣,还有一个特定的函数用于从DataFrame获取单个标量值:dataframe.at[index, column]

  • 执行`.values [0]`只是为了得到实际的单元格值是如此笨重.熊猫开发者应该真正改善这一点. (11认同)
  • `get_value`现已弃用(v0.21.0 RC1(2017年10月13日))[参考文献](https://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#deprecations)`.不推荐使用.iat []或.at []访问器(GH15269)的Series,DataFrame,Panel,SparseSeries和SparseDataFrame上的get_value和.set_value. (3认同)