当前位置:  开发笔记 > 编程语言 > 正文

如何从数据帧的单元格中获取值?

如何解决《如何从数据帧的单元格中获取值?》经验,为你挑选了8个好方法。

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

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

现在我想从特定列中获取值:

val = d2['col_name']

但结果我得到一个包含一行和一列(一个单元格)的数据帧.这不是我需要的.我需要一个值(一个浮点数).我怎么能在熊猫里做到这一点?



1> Andy Hayden..:

如果您只有一行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


请注意,此解决方案返回一个Series,而不是一个值!
@Sophologist我同意这是必要的荒谬.当您尝试内联传递条件时,它也不起作用; `my_df.loc [my_df ['Col1'] == foo] ['Col2']`仍然返回一个类型为``的对象

2> Jeff..:

这些是标量的快速访问

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


我非常喜欢这个答案.但是你可以做`.iloc [-1] ['A']`你不能在`-1,'A']`来获取最后一行
@hartmut您总是可以执行at [df.index [-1],'A']`
这应该是答案,因为我们不会在内存中复制一条无用的行来获取内部只有一个元素.

3> Guillaume..:

您可以将1x1数据帧转换为numpy数组,然后访问该数组的第一个也是唯一的值:

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


请通过更多解释来提高答案的质量.
我更喜欢这种方法并经常使用。过去也使用`.get_values()[0]`。

4> Shihe Zhang..:

大多数答案都是使用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



5> timeislove..:

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



6> Natacha..:

我需要一个由列和索引名称选择的单元格的值。此解决方案为我工作:

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



7> 小智..:

不知道这是否是一个好习惯,但是我注意到我也可以通过将序列强制转换为来获得值float

例如

rate

3 0.042679

名称:Unemployment_rate,dtype:float64

float(rate)

0.0426789



8> jroakes..:

我找到的最快/最简单的选项如下。501表示行索引。

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


现在不推荐使用get_value(v0.21.0 RC1(2017年10月13日))[此处是参考](https://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#deprecations)`。不推荐使用Series,DataFrame,Panel,SparseSeries和SparseDataFrame上的get_value和.set_value,而建议使用.iat []或.at []访问器(GH15269)`
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有