我构造了一个从我的数据框中提取一行的条件:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
现在我想从特定列中获取值:
val = d2['col_name']
但结果我得到一个包含一行和一列(即一个单元格)的数据帧.这不是我需要的.我需要一个值(一个浮点数).我怎么能在熊猫里做到这一点?
如果您只有一行DataFrame,则使用Series访问第一个(唯一)行iloc
,然后使用列名访问该值:
In [3]: sub_df Out[3]: A B 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 = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC')) In [16]: df Out[16]: A B C 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
您可以将1x1数据帧转换为numpy数组,然后访问该数组的第一个也是唯一的值:
val = d2['col_name'].values[0]
大多数答案都是使用iloc
哪个有利于按位置选择.
如果您需要按标签选择 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
它看起来像是pandas 10.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
我需要一个由列和索引名称选择的单元格的值。此解决方案为我工作:
original_conversion_frequency.loc[1,:].values[0]
不知道这是否是一个好习惯,但是我注意到我也可以通过将序列强制转换为来获得值float
。
例如
rate
3 0.042679
名称:Unemployment_rate,dtype:float64
float(rate)
0.0426789
我找到的最快/最简单的选项如下。501表示行索引。
df.at[501,'column_name'] df.get_value(501,'column_name')