Answers:
如果您的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
at
是一个非常好的答案,尽管我觉得很奇怪,就像ix
:))
my_df.loc[my_df['Col1'] == foo]['Col2']
仍然返回类型的对象<class 'pandas.core.series.Series'>
这些是标量的快速访问
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']
你不能做at[-1,'A']
让最后一排的条目
at[df.index[-1],'A']
您可以将1x1数据帧转换为numpy数组,然后访问该数组的第一个也是唯一的值:
val = d2['col_name'].values[0]
.get_values()[0]
过。
熊猫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
我找到的最快/最简单的选项如下。501表示行索引。
df.at[501,'column_name']
df.get_value(501,'column_name')
对于0.10的大熊猫,在iloc
不可取的地方,过滤a DF
并获取列的第一行数据VALUE
:
df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')
如果过滤的行数超过1,则获取第一行的值。如果过滤器导致数据帧为空,则会出现异常。
get_value
现已弃用(v0.21.0 RC1(2017年10月13日))参考在这里 .get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
iat
或at
无法基于列名获取值。
不知道这是否是一个好习惯,但是我注意到我也可以通过将序列强制转换为来获得值float
。
例如
rate
3 0.042679
名称:Unemployment_rate,dtype:float64
float(rate)
0.0426789
df_gdp.columns
索引([u'Country',u'Country Code',u'Indicator Name',u'Indicator Code',u'1960',u'1961',u'1962',u'1963',u'1964' ,u'1965',u'1966',u'1967',u'1968',u'1969',u'1970',u'1971',u'1972',u'1973',u'1974' ,u'1975',u'1976',u'1977',u'1978',u'1979',u'1980',u'1981',u'1982',u'1983',u'1984' ,u'1985',u'1986',u'1987',u'1988',u'1989',u'1990',u'1991',u'1992',u'1993',u'1994' ,u'1995',u'1996',u'1997',u'1998',u'1999',u'2000',u'2001',u'2002',u'2003',u'2004',u'2005',u'2006',u'2007',u'2008',u'2009',u'2010', u'2011',u'2012',u'2013',u'2014',u'2015',u'2016'],dtype ='object')
df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]
8100000000000.0
SettingWithCopyWarning
,则可以查看此帖子以获取警告的解释以及可能的解决方法/解决方案。