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

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

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

val = d2['col_name']

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


当前回答

你可以把你的1x1数据帧转换成一个NumPy数组,然后访问该数组的第一个也是唯一的值:

val = d2['col_name'].values[0]

其他回答

对于pandas 0.10(其中iloc不可用),过滤DF并获取VALUE列的第一行数据:

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

如果过滤了多个行,则获取第一行的值。如果筛选结果为空数据帧,则会出现异常。

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

这些是标量的快速访问方法:

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

将它转换为整数对我有用:

int(sub_df.iloc[0])

如果你有一个只有一行的DataFrame,那么使用iloc访问第一行作为Series,然后使用列名访问值:

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