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

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

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

val = d2['col_name']

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


当前回答

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

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

其他回答

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

例如,

rate

3 0.042679

名称:Unemployment_rate, dtype: float64

float(rate)

0.0426789

使用.item()将返回一个标量(而不是Series),并且它仅在选中单个元素时有效。它比.values[0]安全得多,后者将返回第一个元素,而不管选择了多少个元素。

>>> df = pd.DataFrame({'a': [1,2,2], 'b': [4,5,6]})
>>> df[df['a'] == 1]['a']  # Returns a Series
0    1
Name: a, dtype: int64
>>> df[df['a'] == 1]['a'].item()
1
>>> df2 = df[df['a'] == 2]
>>> df2['b']
1    5
2    6
Name: b, dtype: int64
>>> df2['b'].values[0]
5
>>> df2['b'].item()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/pandas/core/base.py", line 331, in item
    raise ValueError("can only convert an array of size 1 to a Python scalar")
ValueError: can only convert an array of size 1 to a Python scalar

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

row = df.iloc[0]

像下面这样使用to_json方法:

row.to_json()

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

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