Python 如何从数据帧的单元格中获取值?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16729574/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to get a value from a cell of a dataframe?
提问by Roman
I have constructed a condition that extract exactly one row from my data frame:
我已经构建了一个条件,可以从我的数据框中精确提取一行:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Now I would like to take a value from a particular column:
现在我想从特定列中获取一个值:
val = d2['col_name']
But as a result I get a data frame that contains one row and one column (i.e.one cell). It is not what I need. I need one value (one float number). How can I do it in pandas?
但结果我得到一个包含一行和一列(即一个单元格)的数据框。这不是我需要的。我需要一个值(一个浮点数)。我怎样才能在熊猫中做到这一点?
采纳答案by Andy Hayden
If you have a DataFrame with only one row, then access the first (only) row as a Series using iloc, and then the value using the column name:
如果您的 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
回答by Jeff
These are fast access for scalars
这些是标量的快速访问
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
回答by timeislove
It looks like changes after pandas 10.1/13.1
看起来像熊猫 10.1/13.1 之后的变化
I upgraded from 10.1 to 13.1, before iloc is not available.
我从 10.1 升级到 13.1,之前 iloc 不可用。
Now with 13.1, iloc[0]['label']gets a single value array rather than a scalar.
现在使用 13.1,iloc[0]['label']获取单值数组而不是标量。
Like this:
像这样:
lastprice=stock.iloc[-1]['Close']
Output:
输出:
date
2014-02-26 118.2
name:Close, dtype: float64
回答by Sergey Sergienko
For pandas 0.10, where ilocis unavalable, filter a DFand get the first row data for the column VALUE:
对于 pandas 0.10,其中iloc不可用的地方,过滤 aDF并获取列的第一行数据VALUE:
df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')
if there is more then 1 row filtered, obtain the first row value. There will be an exception if the filter result in empty data frame.
如果过滤了多于 1 行,则获取第一行值。如果过滤器导致空数据框,则会出现异常。
回答by Michael Wei
Not sure if this is a good practice, but I noticed I can also get just the value by casting the series as float.
不确定这是否是一个好的做法,但我注意到我也可以通过将系列转换为float.
e.g.
例如
rate
3 0.042679
Name: Unemployment_rate, dtype: float64
3 0.042679
名称:Unemployment_rate,数据类型:float64
float(rate)
0.0426789
0.0426789
回答by jroakes
The quickest/easiest options I have found are the following. 501 represents the row index.
我发现的最快/最简单的选项如下。501 表示行索引。
df.at[501,'column_name']
df.get_value(501,'column_name')
回答by Shihe Zhang
Most answers are using ilocwhich is good for selection by position.
大多数答案都使用ilocwhich 有利于按位置选择。
If you need selection-by-labellocwould be more convenient.
如果需要按标签选择loc会更方便。
For getting a value explicitly (equiv to deprecated df.get_value('a','A'))
# this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932
用于显式获取值(相当于已弃用的 df.get_value('a','A'))
# this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932
回答by Guillaume
You can turn your 1x1 dataframe into a numpy array, then access the first and only value of that array:
您可以将 1x1 数据帧转换为 numpy 数组,然后访问该数组的第一个也是唯一的值:
val = d2['col_name'].values[0]
回答by Su Tingxuan
df_gdp.columns
Index([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')
Index([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
8100000000000.0
回答by Natacha
I needed the value of one cell, selected by column and index names. This solution worked for me:
我需要一个单元格的值,由列名和索引名选择。这个解决方案对我有用:
original_conversion_frequency.loc[1,:].values[0]
original_conversion_frequency.loc[1,:].values[0]

