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

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

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

val = d2['col_name']

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


当前回答

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

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

其他回答

我在使用MultiIndexes的数据框架时遇到过这种情况,发现squeeze很有用。

从文档中可以看到:

将1维轴对象挤压成标量。 具有单个元素的系列或dataframe被压缩为标量。 具有单列或单行的数据帧被压缩到a 系列。否则,对象不变。

# Example for a dataframe with MultiIndex
> import pandas as pd

> df = pd.DataFrame(
                    [
                        [1, 2, 3],
                        [4, 5, 6],
                        [7, 8, 9]
                    ],
                    index=pd.MultiIndex.from_tuples( [('i', 1), ('ii', 2), ('iii', 3)] ),
                    columns=pd.MultiIndex.from_tuples( [('A', 'a'), ('B', 'b'), ('C', 'c')] )
)

> df
       A  B  C
       a  b  c
i   1  1  2  3
ii  2  4  5  6
iii 3  7  8  9

> df.loc['ii', 'B']
   b
2  5

> df.loc['ii', 'B'].squeeze()
5

注意df。at[]也可以(如果你不需要使用条件),那么你仍然需要指定MultiIndex的所有级别。

例子:

> df.at[('ii', 2), ('B', 'b')]
5

我有一个六层索引和两层列的数据框架,所以只需要指定外层是非常有用的。

看起来像是熊猫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

我需要一个单元格的值,按列名和索引名选择。 这个解决方案对我很有效:

original_conversion_frequency.loc [1:] . values [0]

这并不需要太复杂:

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

我不确定这是否是一个好的实践,但我注意到我也可以通过将该系列转换为float来获得值。

例如,

rate

3 0.042679

名称:Unemployment_rate, dtype: float64

float(rate)

0.0426789