如何从数据框的单元格中获取值?
我已经构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