我构造了一个条件,从我的数据帧中提取一行:

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

现在我想从一个特定的列中取一个值:

val = d2['col_name']

但结果是,我得到的数据帧只包含一行和一列(即一个单元格)。这不是我需要的。我需要一个值(一个浮点数)。在熊猫身上怎么做呢?


当前回答

要获得完整行的值为JSON(而不是一个Serie):

row = df.iloc[0]

像下面这样使用to_json方法:

row.to_json()

其他回答

看起来像是熊猫10.1或13.1之后的变化。

我从10.1升级到13.1。以前,iloc是不可用的。

现在在13.1版本中,iloc[0]['label']获得一个值数组,而不是一个标量。

是这样的:

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

输出:

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

我所找到的最快和最简单的方法如下。501表示行索引。

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

在以后的版本中,你可以简单地这样做来修复它:

val = float(d2['col_name'].iloc[0])

大多数答案都是使用iloc,它适合按位置选择。

如果需要按标签选择,loc会更方便。

显式获取值(相当于已弃用 df.get_value (' a ', ' ')) #这也等价于df1.at['a',' a'] 在[55]:df1中。loc [' a ', ' ') [55]: 0.13200317033032932

这并不需要太复杂:

val = df.loc[df.wd==1, 'col_name'].values[0]