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?
SettingWithCopyWarning
, puede consultar esta publicación para obtener una explicación de la advertencia y las posibles soluciones / soluciones.Respuestas:
Si tiene un DataFrame con solo una fila, acceda a la primera (solo) fila como Serie usando
iloc
, y luego al valor usando el nombre de la columna:fuente
at
es una respuesta muy buena, aunque me parece extraño que seaix
:))my_df.loc[my_df['Col1'] == foo]['Col2']
todavía devuelve un objeto de tipo<class 'pandas.core.series.Series'>
Estos son acceso rápido para escalares
fuente
.iloc[-1]['A']
no puede hacerat[-1,'A']
para obtener la entrada de la última filaat[df.index[-1],'A']
Puede convertir su marco de datos 1x1 en una matriz numpy, luego acceder al primer y único valor de esa matriz:
fuente
.get_values()[0]
también.La mayoría de las respuestas están utilizando, lo
iloc
que es bueno para la selección por posición.Si necesita selección por etiqueta
loc
sería más conveniente.fuente
Necesitaba el valor de una celda, seleccionada por columna y nombres de índice. Esta solución funcionó para mí:
original_conversion_frequency.loc[1,:].values[0]
fuente
Parece que los cambios después de los 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 valor único en lugar de un escalar.Me gusta esto:
Salida:
fuente
Las opciones más rápidas / fáciles que he encontrado son las siguientes. 501 representa el índice de la fila.
fuente
get_value
la referencia está en desuso ahora (v0.21.0 RC1 (13 de octubre de 2017)) aquí.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Para pandas 0.10, donde no
iloc
está disponible, filtre ayDF
obtenga los datos de la primera fila de la columnaVALUE
: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.
fuente
get_value
ahora está en desuso (v0.21.0 RC1 (13 de octubre de 2017)) la referencia está aquí.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
iat
oat
no puede obtener el valor basado en el nombre de la columna.No estoy seguro si esta es una buena práctica, pero noté que también puedo obtener el valor al lanzar la serie como
float
.p.ej
fuente
No necesita ser complicado:
fuente
fuente