我构造了一个从我的数据框中提取一行的条件:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
现在我想从特定列中获取值:
val = d2['col_name']
但结果我得到一个包含一行和一列的数据帧(即一个单元格)。这不是我需要的。我需要一个值(一个浮点数)。我怎么能在熊猫中做到这一点?
答案 0 :(得分:285)
如果您的DataFrame只有一行,那么使用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
答案 1 :(得分:138)
这些是标量的快速访问
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
答案 2 :(得分:33)
您可以将1x1数据帧转换为numpy数组,然后访问该数组的第一个也是唯一的值:
val = d2['col_name'].values[0]
答案 3 :(得分:15)
大多数答案都使用iloc
,这有利于按位置选择。
如果您需要selection-by-label loc
会更方便。
明确获取值(等同于弃用 df.get_value( '一个', 'A'))
# this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932
答案 4 :(得分:13)
看起来像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
答案 5 :(得分:12)
不需要太复杂:
val = df.loc[df.wd==1, 'col_name'].values[0]
答案 6 :(得分:6)
我需要一个由列和索引名称选择的单元格的值。 这个解决方案对我有用:
original_conversion_frequency.loc[1,:].values[0]
答案 7 :(得分:4)
不确定这是不是一个好习惯,但我注意到我也可以通过将该系列视为float
来获得该值。
e.g。
rate
3 0.042679
姓名:Unemployment_rate,dtype:float64
float(rate)
0.0426789
答案 8 :(得分:4)
我发现的最快/最简单的选项如下。 501表示行索引。
df.at[501,'column_name']
df.get_value(501,'column_name')
答案 9 :(得分:2)
对于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')
如果有超过1行被过滤,则获取第一行值。如果过滤器导致空数据帧,则会出现异常。
答案 10 :(得分:1)
将其转换为整数对我有用:
int(sub_df.iloc[0])
答案 11 :(得分:0)
要以JSON(而不是Serie)的形式获取完整行的值:
row = df.iloc[0]
像下面这样使用to_json
方法:
row.to_json()
答案 12 :(得分:-3)
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