¿Cómo obtener un valor de una celda de un dataframe?

He construido una condición que extrae exactamente una fila de mi dataframe:

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

Ahora me gustaría tomar un valor de una columna en particular:

 val = d2['col_name'] 

Pero como resultado obtengo un dataframe que contiene una fila y una columna ( es decir, una celda). No es lo que necesito. Necesito un valor (un número flotante). ¿Cómo puedo hacerlo en pandas?

Si tiene un DataFrame con solo una fila, entonces acceda a la primera fila (solo) como una Serie usando iloc , y luego el valor usando el nombre de la columna:

 In [3]: sub_df Out[3]: AB 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 

Estos son de acceso rápido para los escalares.

 In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC')) In [16]: df Out[16]: ABC 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 

Puede convertir su dataframe 1×1 en una matriz numpy, luego acceder al primer y único valor de esa matriz:

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

La mayoría de las respuestas utilizan iloc que es bueno para la selección por posición.

Si necesita una selección por etiqueta, la loc sería más conveniente.

Para obtener un valor explícitamente (equivale a df.get_value (‘a’, ‘A’) en desuso)

 # this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932 

Parece que los cambios después de pandas 10.1 / 13.1

Actualicé de 10.1 a 13.1, antes de que iloc no esté disponible.

Ahora con 13.1, iloc[0]['label'] obtiene una matriz de un solo valor en lugar de un escalar.

Me gusta esto:

 lastprice=stock.iloc[-1]['Close'] 

Salida:

 date 2014-02-26 118.2 name:Close, dtype: float64 

Necesitaba el valor de una celda, seleccionada por nombre de columna e índice. Esta solución funcionó para mí:

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

No estoy seguro de que sea una buena práctica, pero me di cuenta de que también puedo obtener el valor al lanzar la serie como float .

p.ej

 rate 

3 0.042679

Nombre: Unemployment_rate, dtype: float64

 float(rate) 

0.0426789

Las opciones más rápidas / fáciles que he encontrado son las siguientes. 501 representa el índice de la fila.

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

Para pandas 0.10, donde iloc es viable, filtre un DF y obtenga los datos de la primera fila para la columna VALUE :

 df_filt = df[df['C1'] == C1val & df['C2'] == C2val] result = df_filt.get_value(df_filt.index[0],'VALUE') 

Si hay más de 1 fila filtrada, obtenga el valor de la primera fila. Habrá una excepción si el filtro da como resultado un dataframe vacío.

 df_gdp.columns 

Índice ([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 = ‘objeto’)

 df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0] 

8100000000000.0