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