如何从数据框的单元格中获取值?

我已经构build了一个条件,从我的数据框中提取一行:

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)] 

现在我想从一个特定的栏目中获得价值:

 val = d2['col_name'] 

但是,结果我得到一个包含一行和一列( 一个单元格)的数据框。 这不是我所需要的。 我需要一个值(一个浮点数)。 我怎么能在pandas呢?

如果只有一行iloc ,则使用iloc作为Series访问第一个(唯一)行,然后使用列名称访问该值:

 In [3]: sub_df Out[3]: AB 2 -0.133653 -0.030854 In [4]: sub_df.iloc[0] Out[4]: A -0.133653 B -0.030854 Name: 2, dtype: float64 In [5]: sub_df.iloc[0]['A'] Out[5]: -0.13365288513107493 

这些是标量的快速访问

 In [15]: df = DataFrame(randn(5,3),columns=list('ABC')) In [16]: df Out[16]: ABC 0 -0.074172 -0.090626 0.038272 1 -0.128545 0.762088 -0.714816 2 0.201498 -0.734963 0.558397 3 1.563307 -1.186415 0.848246 4 0.205171 0.962514 0.037709 In [17]: df.iat[0,0] Out[17]: -0.074171888537611502 In [18]: df.at[0,'A'] Out[18]: -0.074171888537611502 

大pandas10.1 / 13.1后看起来像是变化了

在iloc不可用之前,我从10.1升级到了13.1。

现在用13.1, iloc[0]['label']得到一个单一的值数组而不是一个标量。

喜欢这个:

 lastprice=stock.iloc[-1]['Close'] 

输出:

 date 2014-02-26 118.2 name:Close, dtype: float64 

对于pandas0.10,其中iloc是不可用的,过滤一个DF并获得列VALUE的第一行数据:

 df_filt = df[df['C1'] == C1val & df['C2'] == C2val] result = df_filt.get_value(df_filt.index[0],'VALUE') 

如果有多于一行过滤,则获取第一行值。 如果filter导致数据框为空,将会出现exception。

不知道这是否是一个好的做法,但我注意到我也可以通过将这个系列作为float来获得价值。

例如

 rate 

3 0.042679

名称:Unemployment_rate,dtype:float64

 float(rate) 

0.0426789

我find的最快/最简单的选项如下。 501代表行索引。

 df.at[501,'column_name'] df.get_value(501,'column_name') 

大多数答案都是使用iloc ,这是很好的按位置select。

如果你需要按标签select loc会更方便。

为了明确地获得一个值(相当于不赞成的df.get_value('a','A'))

 # this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932