versiones guia python pandas dataframe

python - guia - qgis manual



¿Cómo obtener un valor de una celda de un marco de datos? (7)

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

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 marco de datos 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?


Estos son de acceso rápido para escalares

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


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

Si necesita selection-by-label loc sería más conveniente.

Para obtener un valor explícitamente (equivalente a obsoleto df.get_value (''a'', ''A''))

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


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

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


No estoy seguro de si esta es una buena práctica, pero me di cuenta de que también puedo obtener el valor arrojando la serie como float .

p.ej

rate

3 0.042679

Nombre: Unemployment_rate, dtype: float64

float(rate)

0.0426789


Para pandas 0.10, donde iloc se puede mover, filtra un DF y obtén 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 marco de datos vacío.


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 única matriz de valores en lugar de escalar.

Me gusta esto:

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

Salida:

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


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

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